2017-09-11 513 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