一尘不染

selenium自动接受警报

selenium

有谁知道如何禁用此功能?还是如何从已自动接受的警报中获取文本?

该代码需要工作,

driver.findElement(By.xpath("//button[text() = \"Edit\"]")).click();//causes page to alert() something
Alert alert = driver.switchTo().alert();
alert.accept();
return alert.getText();

但是却给出了这个错误

No alert is present (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 2.14 seconds

我正在将FF 20与Selenium 2.32一起使用


阅读 207

收藏
2020-06-26

共1个答案

一尘不染

就在前几天,我已经回答了类似的问题,所以它仍然很新鲜。您的代码失败的原因是,如果在处理代码时未显示警报,则该警告通常会失败。

值得庆幸的是 ,来自Selenium WebDriver的家伙们已经等待了它。对于您的代码,这样做很简单:

String alertText = "";
WebDriverWait wait = new WebDriverWait(driver, 5);
// This will wait for a maximum of 5 seconds, everytime wait is used

driver.findElement(By.xpath("//button[text() = \"Edit\"]")).click();//causes page to alert() something

wait.until(ExpectedConditions.alertIsPresent());
// Before you try to switch to the so given alert, he needs to be present.

Alert alert = driver.switchTo().alert();
alertText = alert.getText();
alert.accept();

return alertText;

您可以找到所有的API ExpectedConditions
在这里,如果你想这个方法后面的代码在这里

此代码还解决了问题,因为关闭警报后无法返回alert.getText(),因此我为您存储了一个变量。

2020-06-26