我正在使用包含许多字段的Webdriver / Java测试网站页面。其中一个字段是下拉框(或选择框),它包含失去焦点时的验证(例如,标签输出)。因此,如果我在下拉列表中选择一个特定选项并选择下一个字段,则会弹出一个警告框,说明"你不能选择它!"。
现在我正在执行检查警报框是否存在的代码,并接受它,但这只适用于DEBUG模式。当运行测试时(即不在调试中),我得到"在等待警报存在的10秒后超时构建信息:版本:' 2.53.0'"。
我知道这可能是一个时间问题,因为它在DEBUG模式下工作,但我无法理解为什么我使用ExpectedConditions.alertIsPresent()。失败的代码在这里:
WebElement currentElement = driver.findElement(By.id("selectbox"));
Select currentSelect = new Select(currentElement);
currentSelect.selectByVisibleText(updatedValue);
currentElement.sendKeys(Keys.TAB);
System.out.println("milestoneA");
if ((exceptionExpected()) {
System.out.println("milestoneB");
wait.until(ExpectedConditions.alertIsPresent());
System.out.println("milestoneC");
checkAlertBox(getExpectedResultFromExcel());
}
在DEBUG模式下,代码保持正常,一切都很好。在我的日志中的RUN模式下,我到达milestoneB,然后抛出上面提到的错误。
除此之外,如果我在Tabbing之前添加一个Thread.sleep(1000),一切正常。
有什么想法吗?
答案 0 :(得分:1)
我会尝试发送TAB
键,直到该元素失去焦点:
WebElement currentElement = driver.findElement(By.id("selectbox"));
currentElement.click();
currentElement.sendKeys("abcd");
// wait for the popup to be visible
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#abc")));
// send the TAB key while the current element has focus
new WebDriverWait(driver, 20).until((WebDriver wd) -> {
currentElement.sendKeys(Keys.TAB);
return !wd.switchTo().activeElement().equals(currentElement);
});