5

嗨,我需要检查一个下拉字段是否具有给定值,但未选择这些值,因此它不会显示在下拉框中。我有以下元素的 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

4 回答 4

8

你要:

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

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

于 2012-12-18T12:02:04.133 回答
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。

于 2012-12-17T07:08:48.753 回答
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;

    }
于 2013-01-19T02:16:22.927 回答
0

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

于 2013-07-06T03:12:07.193 回答