2012-12-17 41 views
5

嗨我需要檢查一個下拉字段有給定值,但這些值沒有選擇,所以它沒有得到顯示在下拉框中。 我具有以下的Xpath對元件Selenium.isElementPresent在Webdriver中的替代方法是什麼

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

被正確識別在瀏覽器中的元素。但是,當我使用以下webdriver方法來驗證它

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,因爲它沒有顯示在框中。

你能告訴我這個選擇嗎?

回答

8

你想:

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

findElements()是這個比findElement()更好,因爲它不會等待,如果該元素不存在。如果您在啓用隱式等待的情況下運行,findElement()將超時查找元素(這是您正在捕獲的異常),並且需要一段時間。

+0

如果您正在測試元素是否存在,爲什麼返回測試等於零? –

+0

@MthetheLock DOH!謝謝,比較是顛倒的,現在已經修復了。 –

4

我發現WebDriver沒有一個名爲isElementPresent()的函數。這是在Selenium-1.0中使用的重要功能之一。 要在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

@覆蓋上面的代碼更易於閱讀並且可重複使用。唯一進一步的建議是改進代碼包括超時。由於通常檢查是出現元素是一些時間框架。用於'findElement()' - with-timeout而不是'findElements()'-with-count的 –

+0

-1。 –

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()用於驗證元件是否可用在頁面上。

相關問題