我在登录失败时使用以下代码断言错误消息。使用此代码,我成功地实现了结果,但它使我的脚本太慢了。
List<WebElement> errorDivs = driver.findElements(By.xpath("//div[@class='errorMsg']"));
if (!errorDivs.isEmpty()) {
System.out.println("Username Or Password is Incorrect" + username);
// pick first one and use as main failure reason
Assert.fail(errorDivs.get(0).getText());
}
答案 0 :(得分:2)
在WebDriver,findElement中,如果找不到指定的元素,findElements将隐式等待,直到达到TIMEOUT限制。这就是为什么你的脚本在等待错误div不存在的原因。您可以使用自己的逻辑来检查元素是否存在,而不是直接使用findElements。
这里逻辑
boolean isElementPresent(WebDriver driver,By by)
{
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
try
{
driver.findElement(by);
return true;
}
catch(Exception e)
{
return false;
}
finally
{
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
}
答案 1 :(得分:1)
我对人们(不一定是你自己)感到沮丧,他们说xpath使用不好而不理解为什么。当更具表现力的CSS选择器无法实现您想要的效果时,Xpath是选择器的绝佳选择。