Webdriver中selenium.isElementPresent的替代方法是什么?

时间:2012-12-17 06:54:26

标签: xpath webdriver selenium-webdriver

您好我需要检查一个下拉字段是否有给定的值,但这些值未被选中,因此它不会显示在下拉框中。 我有元素

的Xpath
//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,因为它没有显示在框中。

你可以告诉我替代方案。

4 个答案:

答案 0 :(得分:8)

你想:

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

findElements()findElement()更好,因为如果元素不存在,它将不会等待。如果您在启用隐式等待的情况下运行,findElement()将超时寻找元素(这是您正在捕获的异常),并且需要一段时间。

答案 1 :(得分: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。

答案 2 :(得分: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;

    }

答案 3 :(得分:0)

使用 isDisplayed()来验证网页上的元素是否可用。