2017-09-11 270 views
0

我想创建一个框架,我想要找到一个webelement是否隐藏或没有对web元素执行操作之前。Selenium - 无法找到隐藏的元素

我有密码字段,它是隐藏的,当我查询输入标签有以下行

Isvisible1 = (string)js1.ExecuteScript("return (window.getComputedStyle?window.getComputedStyle(arguments[0], null):arguments[0].currentStyle).visibility;", myCurElement); 
       Isvisible2 = (string)js1.ExecuteScript("return (window.getComputedStyle(arguments[0], null).getPropertyValue('display'));", myCurElement);      
       Isvisible3 = (bool)js1.ExecuteScript("return !(arguments[0].offsetHeight <= 1);", myCurElement); 

我让所有的值表明它的结构如下

<div class=hidepassword> 
    <input password field > 
<div> 

可见。

后来才知​​道前面div有的类是让输入看不见的。 我试图让类的.css文件中提供的溢出值hidepassword

但不幸的是,类hidepassword有很多css值,当我使用下面的javascript函数时,我是就能得到的只有它的CSS价值的

public string getStyle(string ClassName) 
    { 
     IJavaScriptExecutor js = (IJavaScriptExecutor)driver; 
     return (String)js.ExecuteScript(
     "function getStyle(ClassName) {" + 
      "var styleSheets = window.document.styleSheets;" + 
      "var styleSheetsLength = styleSheets.length;" + 
      "for (var i = 0; i < styleSheetsLength; i++)" + 
      "{" + 
      " var classes = styleSheets[i].rules || styleSheets[i].cssRules;" + 
      " if (!classes)" + 
      "  continue;" + 
      " var classesLength = classes.length;" + 
      " for (var x = 0; x < classesLength; x++)" + 
      " {" + 
      "  if (classes[x].selectorText == ClassName)" + 
      "  {" + 
      "   var ret;" + 
      "   if (classes[x].cssText)" + 
      "   {" + 
      "    ret = classes[x].cssText;" + 
      "   }" + 
      "   else" + 
      "   {" + 
      "    ret = classes[x].style.cssText;" + 
      "   }" + 
      "   if (ret.indexOf(classes[x].selectorText) == -1)" + 
      "   {" + 
      "    ret = classes[x].selectorText + ret ;" + 
      "   }" + 
      "   return ret;" + 
      "  }" +     
      " }" +     
      "}" +     
     "}return getStyle(arguments[0]);", ClassName); 
    } 

有没有办法让基于该类的CSS值的特定类名称的所有的CSS值,然后,我们就可以拨打电话是否元素是可见的或不可见的。 ?

在此先感谢您的所有帮助。

回答

0

硒有供应API:isDisplayed()来检测元件的知名度,为什么你想自己来实现它是这样复杂的

+0

感谢您的评论。这不适用于我的情况。尽管元素不可见,Selenium却告诉它它是可见的。 –

+0

@Rajan,你能告诉我浏览器开发工具中div元素的'display'的计算样式值吗?你能分享你的发现,它控制了div或input元素的可见性, – yong