2012-06-07 12 views
8

Selenium DotNet Webdriver(2.22.0)の最新バージョンで、要素がクリック/相互作用する前に表示されるかどうかを確認する方法はありますか?Selenium C#Webdriver要素が表示されているかどうかを検出する方法

私が見つけた唯一の方法は、キーを送信しようとするか、それをクリックしようとするElementNotVisible例外を処理しようとすることです。残念なことに、これは要素と対話しようとする試みが行われた後にのみ発生します。特定の値を持つ要素を見つけるために再帰関数を使用していますが、これらの要素のいくつかは特定のシナリオでのみ表示されます(ただし、htmlは何であっても見つけられます)。

RenderedWebElementクラスは、他のバリアントと同様に推奨されなくなりました。だからこそキャスティングはありません。

ありがとうございました。

+0

WebElement.isDisplayed(があるはずです)要素は、残念ながら例外をキャッチすると、移動するための方法である –

+0

表示されているかどうかをチェックします。表示され、有効にされている要素が常に表示可能な要素であるとは限りません。これは、要素が(一部のブラウザでは)ビューから外れている場合に発生し、一般的に行う必要があるのは要素にスクロールして可視になることです。 – ljgww

答えて

18

は、JavaについてRemoteWebElementに()がisDisplayedれる - もISENABLEDある()

C#では、表示&有効性があります。

要素がページ上にあり、ユーザーに見えるようにするには、どちらもtrueである必要があります。

「HTMLはまだ見つかっていますが、見つかっても問題はありません」の場合は、BOTH isDisplayed(Java)/ Displayed(C#)AND isEnabled(Java)/ Enabled(C#)を選択します。

例、C#で:

public void Test() 
{ 
    IWebDriver driver = new FirefoxDriver(); 
    IWebElement element = null; 
    if (TryFindElement(By.CssSelector("div.logintextbox"), out element) 
    { 
     bool visible = IsElementVisible(element); 
     if (visible) 
     { 
      // do something 
     } 
    } 
} 

public bool TryFindElement(By by, out IWebElement element) 
{ 
    try 
    { 
     element = driver.FindElement(by); 
    } 
    catch (NoSuchElementException ex) 
    { 
     return false; 
    } 
    return true; 
} 

public bool IsElementVisible(IWebElement element) 
{ 
    return element.Displayed && element.Enabled; 
} 
+0

助けてくれてありがとう! – user1442482

関連する問題