我正在尝试使用Selenium在包含多个页面的网站上测试表单。根据所选的选项,有些模式可能会出现在某些页面上。目前我无法让Selenium与Fireforx和模态一起正常工作。 Chrome的行为符合预期,我没有对I.E.感到困扰。爱好。
我正在使用 driver.switchTo()。alert()。accept(); 来处理模态,我遇到的第一个模态将关闭,但是一旦我到达下一页Selenium代码无法找到页面上的任何元素。
以下是我用来点击按钮的代码:
public void pushButton(String[] values) {
System.out.println("\t Click (" + values[1] + ")");
setLocator(values[0], values[1]);
try {
clickWhenReady(locator).click();
} catch (Exception e) {
System.out.println("Could not find id or xpath value: " + values[1]);
e.printStackTrace();
}
}
private void setLocator(String byType, String value) {
if(byType.toUpperCase().equals("ID")) {
locator= By.id(value);
} else if(byType.toUpperCase().equals("XPATH")){
locator= By.xpath(value);
}
}
private WebElement whenReady(By locator){
WebElement element = (new WebDriverWait(driver, 30))
.until(ExpectedConditions.presenceOfElementLocated(locator));
return element;
}
private WebElement clickWhenReady(By locator){
WebElement element = (new WebDriverWait(driver, 30))
.until(ExpectedConditions.elementToBeClickable(locator));
return element;
}
答案 0 :(得分:0)
首先,modals
不是alerts
所以,driver.switchTo().alert().accept();
可能不会给你买任何东西。
真正的问题可能是模式需要更长时间才能淡出并阻止Selenium
与页面进行交互。你最好的选择是尝试等待模态完全从dom中消失,然后尝试与元素进行交互。为此,您可以使用invisibilityOfElementLocated
ExpectedConditions
或类似机制。见this