Selenium警报仅在调试模式下显示

时间:2016-04-20 10:57:40

标签: java selenium-webdriver alert

我正在使用包含许多字段的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),一切正常。

有什么想法吗?

1 个答案:

答案 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);
});