【问题标题】:Assert that a webelement is not present - fast solution?断言 webelement 不存在 - 快速解决方案?
【发布时间】:2013-07-01 11:49:34
【问题描述】:

我需要在我的测试中多次断言一个 web 元素不存在。我已经在网站上搜索过这个,并在答案中找到了我的代码中已有的内容:

try{
    WebElement w = driver.findElement(By.id("warning"));
} catch (NoSuchElementException e){
    return true;
}
return false;

我想知道是否有更快的方法?因为每次在元素不存在时运行,捕获异常需要很长时间。我知道这是因为 webdriver 正在整个页面中搜索元素,但仍然......有更快的方法吗?

是否有可能以某种方式以非常低的超时时间使用 WebDriverWait?

谢谢

【问题讨论】:

    标签: java webdriver nosuchelementexception


    【解决方案1】:

    这是由于 WebDriver 中的隐式等待。为避免在未找到元素时出现这种等待,您需要在验证条件之前将隐式等待时间设置为零。

    • 将implicity_wait 设置为0,这样WebDriver 就不会隐式 等待。
    • 找到元素时返回 True。赶上 NoSuchElementException 并在我们发现 元素不存在,而不是用 例外。
    • 在操作完成后将implicitly_wait 设置回10 完成,以便 WebDriver 将来隐式等待。

    请参阅this了解上述过程的实施。

    【讨论】:

    • 感谢您的回复。我已经尝试过了,但它实际上减慢了测试速度。尝试了上述方法后,仍然需要很长时间才能捕捉到异常。此外,通常运行速度较快的测试的后期部分运行速度较慢。在这里显式等待会更好吗?
    【解决方案2】:

    另一种选择是查找元素列表,然后检查列表的长度。

    List<WebElement> warnings = driver.findElements(By.id("warning"));
    if warnings.length() == 0 {
        return true;
    } else return false;
    

    这样做的好处是不必等待driver 中指定的超时。希望为您提供一个可能的替代方案。

    【讨论】:

    • 你可以通过返回warnings.length() == 0来缩短它,但是它并不能解决问题。
    【解决方案3】:

    试试这个功能

    boolean isElementExists(By elementSelector) {
          return driver.findElements(elementSelector).size() > 0;
    }
    

    【讨论】:

    • 它也会等待由implicity_wait()设置的秒数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多