Обработка оповещений в Selenium WebDriver (Selenium 2) - PullRequest
7 голосов
/ 02 марта 2011
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!)

Ответы [ 7 ]

12 голосов
/ 08 марта 2011

Начиная с последней версии Селена 2, это можно сделать (по крайней мере, с помощью FirefoxDriver):

    driver.switchTo().alert().accept();
4 голосов
/ 01 апреля 2011

В предыдущей версии Selenium 2 у меня не было выбора для обработки предупреждений в Internet Explorer путем переопределения window.alert в Javascript:

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, чтобы понять, почему это так.

4 голосов
/ 03 марта 2011

В Selenium 2, в настоящее время оповещения обрабатываются только в браузере Firefox. Вы не указываете, какой язык вы используете для своих тестов, но вот как обработать оповещение, используя ruby. (Это взято со страницы Ruby Bindings на вики-сайте Selenium).

Javascript Alert / Confirm

Вы можете использовать веб-драйвер для обработки предупреждений 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
2 голосов
/ 09 августа 2012

Вам придется обработать исключение и запустить код обработчика для Alert, для Java:

      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
      }  

Перехватите это исключение, и тогда вы сможете соответственно принять или отклонить предупреждение.

2 голосов
/ 13 августа 2011
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();
1 голос
/ 18 июля 2012
Alert alert = driver.switchTo().alert();
alert.accept();

Если вы хотите отменить всплывающее окно, используйте следующее:

 alert.dismiss();

вместо

 alert.accept():
1 голос
/ 14 февраля 2012

C # код:

IAlert alert = driver.SwitchTo().Alert();
alert.Accept(); 
System.Threading.Thread.Sleep(milliseconds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...