在 selenium IDE 中录制时,我可以在弹出窗口中单击“确定”按钮,并希望能够使用单击它
driver.findElement(By.linkText("OK")).click();
但事实并非如此。
同样,这不起作用。
driver.switchTo().alert().accept();
Selenium 引发 NoAlertPresent 异常。如果弹出的不是警报,那是什么?我如何点击是!
在 selenium IDE 中录制时,我可以在弹出窗口中单击“确定”按钮,并希望能够使用单击它
driver.findElement(By.linkText("OK")).click();
但事实并非如此。
同样,这不起作用。
driver.switchTo().alert().accept();
Selenium 引发 NoAlertPresent 异常。如果弹出的不是警报,那是什么?我如何点击是!
它可以是任何东西。你应该告诉我们。
如果它是一个 Java 脚本警报,那么这应该可以工作
driver.switchTo().alert().accept();
如果网络应用程序自动选择/突出显示“确定”按钮,至少您可以尝试发送输入/返回键击。
import org.openqa.selenium.Keys
WebElement.sendKeys(Keys.RETURN);
更新
也可能是因为在您尝试单击/接受时您的警报不存在。要快速检查,请先休眠 4-5 秒,然后再尝试driver.switchTo().alert().accept();
。一旦确定,然后在try
andcatch
循环中等待警报(任何异常处理)。
在这种情况下,我更愿意检查(验证)页面上的警报存在,然后如果存在 - 接受它。它类似于:
public boolean isAlertPresent() {
boolean presentFlag = false;
try {
// Check the presence of alert
Alert alert = driver.switchTo().alert();
// Alert present; set the flag
presentFlag = true;
// if present consume the alert
alert.accept();
} catch (NoAlertPresentException ex) {
// Alert not present
ex.printStackTrace();
}
return presentFlag;
}
在这里您可以获得详细信息也不要忘记逐步调试。
希望这对您有所帮助。
如果您使用的是最新版本的 webdriver,那么实际上任何高于 2.20 的版本
driver.switchTo().alert().accept();
如果警报是一个类似于我们单击时得到的警报,则应该可以工作
更新
在这里,此代码将帮助您接受警报
driver = new FirefoxDriver();
String baseUrl = "http://www.w3schools.com/js/tryit.asp?filename=tryjs_alert";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl);
driver.switchTo().frame(0);
driver.findElement(By.cssSelector("input[type=\"button\"]")).click();
driver.switchTo().alert().accept();