2012-12-17 71 views
5

こんにちは、ドロップダウンフィールドに値が指定されていることを確認する必要がありますが、これらの値は選択されていないため、ドロップダウンボックスには表示されません。 Iブラウザに正しく要素を識別された要素Webdriverのselenium.isElementPresentの代替手段

//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not='] 

のXPathを以下ています。しかし、私は

driver.findElement(By.xpath("//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not=']")).isDisplayed(); 

それがボックスに表示さ取得されていないので、そのはfalseを返すことを確認するには、次のwebdriverをメソッドを使用していたとき。

これの代替手段を教えてもらえますか?

答えて

8

あなたが欲しい:要素が存在しない場合、それは待つことはありませんので、

private boolean isElementPresent(WebDriver driver, By by){ 
    return driver.findElements(by).count != 0; 
} 

findElements()findElement()よりも、このためのより良いです。暗黙の待機が有効になっている状態で実行している場合は、findElement()が要素を探してタイムアウトします(これは例外です)。しばらく時間がかかります。

+0

要素が存在するかどうかをテストしている場合、なぜリターンテストの等価性がゼロであるのですか? –

+0

@MatthewLock DOH!ありがとう、比較は逆転され、今修正されました。 –

4

WebDriverにはisElementPresent()という機能がないことがわかりました。これはSelenium-1.0で使用された重要な機能の1つでした。 WebDriverでこれを実装するには、下記のようにメソッドを記述するだけです。その後、

By(などBy.id、BY.name、)のいずれかのタイプに
private boolean isElementPresent(WebDriver driver, By by){ 
    try{ 
    driver.findElement(by); 
    return true; 
    }catch(NoSuchElementException e){ 
    return false; 
    } 
} 

を、この機能を使用すると、ここであなたが

if (isElementPresent(by.id("btnSubmit")) { 
    // preform some actions 
} 

この関数を呼び出す方法の一例であることができます上記の関数は、要素がページにある場合はtrueを返し、そうでない場合はfalseを返します。

+1

@Arun上記のコードは読みやすく、再利用可能です。唯一の提案はタイムアウトを含むコードを改善することです。通常、表示される要素のチェックはある時間枠で行われるためです。 –

+0

-1 'findElement()' --with-timeoutには 'findElements()'の代わりに-with-countを使います。 –

0
internal static bool IsElementPresent(IWebDriver driver, By by, int timeoutSeconds=10) 
    { 

     for (int second = 0; second< timeoutSeconds ; second++) 
     { 
      try 
      { 
       driver.FindElement(by); 
      } 
      catch (NoSuchElementException e) 
      { 
       Thread.Sleep(1000); 
       continue; 
      } 

      return true; 
     } 

     return false; 

    } 
0

使用isDisplayed()要素がページ上利用可能であるかどうかを検証します。