使用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 ,并且必须返回可靠的布尔结果。
答案 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方法中。