使用Selenium,在最长时间后,页面上没有最佳验证方法吗?

时间:2015-01-11 20:54:45

标签: selenium

使用Selenium,在最长时间后,页面上没有最好的方法(或设计模式)来验证某些东西?

我知道我们可以等待一个元素出现在其上,如下所示:

(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith("cheese!");
            }
        });

但是,如果我想确保10秒钟, OPPOSITE 是真的,并且页面上没有元素出现在其中的某个文字怎么办?基本上,预期通常但不总是达到最大超时的条件。

在我的用例中,重要的是对方法的调用不会抛出将退出JUnit / TestNG测试用例的任何异常,而是始终允许连续的测试步骤继续并且最终的softAsserts发生。

该方法应该有这样的签名:

Boolean verifyElementWithTextDoesNotAppear( By locator, String, text, long timeout )

是否有一个好的设计模式,任何人都可以使用它来最有效地做到这一点?该方法不得抛出 TimeoutException ,也不得在达到超时之前或之后抛出任何特定类型的 WebDriverException ,并且必须返回可靠的布尔结果。

2 个答案:

答案 0 :(得分:0)

到目前为止,我最好的猜测,如果你期望一个FALSE,调用这个方法是安全的,我想:

public Boolean elementExistsWithinSeconds(By locator, int seconds)
{
    ExpectedCondition<List<WebElement>> elementListCondition = 
           ExpectedConditions.presenceOfAllElementsLocatedBy(locator);
    WebDriverWait wait = webDriverManager.getCachedWebDriverWait(seconds);
    try {
        List<WebElement> elementList = wait.until(elementListCondition);
        if ( elementList.size() > 0 ) return Boolean.TRUE;
    } catch ( TimeoutException te ) {
        LOG.debug( "Element '" + locator.toString() + "' with text '" + text +
             "' was not found within timeout.", te);            
    }
    return Boolean.FALSE;
}

答案 1 :(得分:-1)

在testng中,我们有一个不会抛出异常的功能。 expectedExceptions = NoSuchElementException.class放在@Test方法中。