2017-09-11 16 views
0

Web要素でアクションを実行する前に、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が入力を不可視にしていることを知りました。 クラスhidepasswordの.cssファイルで利用できるオーバーフローの値を取得しようとしました

残念ながら、class 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、ブラウザのdevツールのdiv要素の 'display'の計算されたスタイル値を教えてください。 div要素やinput要素の可視性を制御した結果を共有できますか? – yong

関連する問題