7
driver.findElement(By.xpath("//input[@value='添加']")).click(); 
//Pops out an Alert and program stops, does not continue 

如何点击警报?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

啊啊啊啊  怎么没有人呢? (TRANS: ahahahahaha why there is no one here to reply my post?)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我顶  (TRANS: Let me promote this post!)
4

7 回答 7

12

从最新的 selenium 2 版本开始,这可以做到(至少使用 FirefoxDriver):

    driver.switchTo().alert().accept();
于 2011-03-08T20:57:00.780 回答
4

在以前版本的 Selenium 2 中,我没有选择通过覆盖 Javascript 中的 window.alert 来处理 Internet Explorer 中的警报:

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
// Override window.alert to store the prompt and accept it automatically
js.ExecuteScript("window.alert = function(msg) { document.bAlert = true; document.lastAlert=msg; }");

// Do some stuff...

// Check for alert
Object o = js.ExecuteScript("return document.bAlert");
if (o != null && (bool)o == true)
{
    //retrieve the alert message
    o = js.ExecuteScript("return document.lastAlert");
    // Do something with the alert text
}

Selenium 2.0b3 支持在 IE 和 Firefox 中处理警报,因此您可以执行以下操作:

IAlert alert = driver.SwitchTo().Alert();
// Get the text from the alert
string alertText = alert.Text;
// Accept the alert
alert.Accept();

但是,我无法使上述内容与是/否警报一起使用(Dismiss() 适用于否,但 Accept() 不适用于是)。我正在查看 IEDriver 以找出原因。

于 2011-04-01T12:57:45.127 回答
4

在 Selenium 2 中,当前警报仅在 Firefox 浏览器中处理。您没有指定用于测试的语言,但这里是如何使用 ruby​​ 处理警报。(这取自selenium wiki 上的Ruby 绑定页面)。

Javascript 警报/确认

您可以使用 webdriver 来处理 javascript 警报和确认对话框。两者的实现是相同的。

注意:目前该 API 仅在 Firefox 中可用(或在使用远程服务器的 Firefox 中),并且只能捕获加载后生成的警报/确认。

require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://mysite.com/page_with_alert.html"

driver.find_element(:name, 'element_with_alert_javascript').click
a = driver.switch_to.alert
if a.text == 'A value you are looking for'
  a.dismiss
else
  a.accept
end
于 2011-03-03T06:25:04.963 回答
2
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("http://skynet:8081/1.htm");

var selenium = new WebDriverBackedSelenium(driver, driver.Url);
selenium.Start();

selenium.Click("css=input[type=button]");

Assert.AreEqual(selenium.GetConfirmation(), "Are you sure?");
Assert.AreEqual("OK", selenium.GetAlert());

// <input type="button" onclick="if(confirm('Are you sure?')) alert('OK'); else alert('Cancel');" value="Alert test" />

driver.Quit();
于 2011-08-12T23:32:18.040 回答
2

对于 Java,您将必须处理异常并运行 Alert 的处理程序代码:

      try{
         driver.findElement(By.xpath("//input[@value='添加']")).click(); 
      } catch(org.openqa.selenium.UnhandledAlertException e){
         Alert alert = driver.switchTo().alert();
         alert.accept();
         // you logic here what you want to do next
      }  

捕捉到这个异常,然后你可以相应地接受或拒绝警报。

于 2012-08-09T14:13:44.287 回答
1

C#代码:

IAlert alert = driver.SwitchTo().Alert();
alert.Accept(); 
System.Threading.Thread.Sleep(milliseconds);
于 2012-02-13T23:42:16.810 回答
1
Alert alert = driver.switchTo().alert();
alert.accept();

如果要取消弹出窗口,请使用以下命令:

 alert.dismiss();

代替

 alert.accept():
于 2012-07-18T11:06:36.580 回答