有谁知道如何禁用此功能?或者如何从已自动接受的警报中获取文本?
此代码需要工作,
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
答案 0 :(得分:6)
就在前几天,我已经回答了类似的事情,所以它仍然很新鲜。您的代码失败的原因是,如果在处理代码时未显示警报,它将大部分失败。
谢天谢地,来自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;
您可以找到ExpectedConditions
here中的所有API,如果您想要此方法背后的代码here。
此代码也解决了这个问题,因为在关闭警报后你无法返回alert.getText(),所以我会为你存储一个变量。
答案 1 :(得分:1)
在接受()之前,您需要获取文本提醒。您现在正在做的是接受(点击“确定”)警报然后尝试在屏幕退出屏幕后获取警报文本,即没有警报。
尝试以下操作,我只添加了一个String,用于检索警报文本,然后返回该字符串。
driver.findElement(By.xpath("//button[text() = \"Edit\"]")).click();//causes page to
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
alert.accept();
return alertText;
答案 2 :(得分:1)
Selenium webdriver没有wait
警报。
因此它会尝试切换到不存在的警报,这就是它失败的原因。
对于快速而不太好的修复,请输入sleep
。
更好的解决方案是在尝试切换到警报之前实现自己的等待警报方法。
<强>更新强>
像这样的东西,从here
粘贴的副本waitForAlert(WebDriver driver)
{
int i=0;
while(i++<5)
{
try
{
Alert alert3 = driver.switchTo().alert();
break;
}
catch(NoAlertPresentException e)
{
Thread.sleep(1000)
continue;
}
}
}
答案 3 :(得分:1)
使用synchronized选项的以下方法将增加更多稳定性
protected Alert getAlert(long wait) throws InterruptedException
{
WebDriverWait waitTime = new WebDriverWait(driver, wait);
try
{
synchronized(waitTime)
{
Alert alert = driver.switchTo().alert();
// if present consume the alert
alert.accept();
return alert;
}
}
catch (NoAlertPresentException ex)
{
// Alert not present
return null;
}
}
答案 4 :(得分:0)
这是JavaScript答案。该文档包含所有语言的示例。 https://www.selenium.dev/documentation/en/webdriver/js_alerts_prompts_and_confirmations/
await driver.wait(until.alertIsPresent());
el = driver.switchTo().alert();
await el.accept();