2013-05-08 2 views
1

У меня есть следующий Селен скрипт для открытия предупреждения о rediff.com:Предупреждение не закрывается с помощью Selenium WebDriver с Google Chrome.

public class TestC { 
    public static void main(String[] args) throws InterruptedException, Exception { 
     System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe"); 
     WebDriver driver = new ChromeDriver(); 
     driver.get("http://www.rediff.com/"); 
     driver.findElement(By.xpath("//*[@id='signin_info']/a[1]")).click(); 
     driver.findElement(By.id("btn_login")).click(); 
     Thread.sleep(5000); 
     Alert alert=driver.switchTo().alert(); 
     alert.accept(); 
    } 
} 

Это то же сценарий работает отлично в Firefox и IE9, однако с помощью Google Chrome после открытия предупреждения, остальная частью коды не является за работой. Главное, чтобы не было никаких исключений, ошибок или чего-либо еще.

Пожалуйста, предоставьте любое решение как можно скорее. Спасибо большое!

Примечание: Если нам нужно изменить любую настройку браузера или любую вещь, пожалуйста, дайте мне знать.

Selenium version:Selenium(2) Webdriver 
OS:Windows 7 
Browser:Chrome 
Browser version:26.0.1410.64 m 
+0

Какая версия chromedriver.exe вы используете? Если вы используете chromedriver2, я не верю, что обработка уведомлений работает с Chrome 26. – JimEvans

+0

Yup..i отсортировал мою проблему с помощью изменения драйвера. Теперь мой скрипт очень хорошо закрыт. – user2346307

ответ

1

Я уверен, что ваша проблема является очень распространенным, поэтому я никогда не советую использовать Thread.sleep(), так как он не гарантирует код будет работать только тогда, когда Alert показывает вверх, и он может сложить время на ваши тесты, даже когда отображается предупреждение.

Приведенный ниже код должен подождать, пока на странице не появится какое-либо предупреждение, и я бы посоветовал вам использовать этот Firefox и IE9.

public class TestC { 
    public static void main(String[] args) throws InterruptedException, Exception { 
     System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe"); 
     WebDriver driver = new ChromeDriver(); 
     WebDriverWait wait = new WebDriverWait(driver, 5); 

     driver.get("http://www.rediff.com/"); 
     driver.findElement(By.xpath("//*[@id='signin_info']/a[1]")).click(); 
     driver.findElement(By.id("btn_login")).click(); 

     wait.until(ExpectedConditions.alertIsPresent()); 

     Alert alert = driver.switchTo().alert(); 
     alert.accept(); 
    } 
} 

В основном все, что делается здесь, меняется Thread.sleep(), на условии, что на самом деле будет двигаться только вперед на код, как скоро alert() присутствует на странице. Как только кто-то это сделает, он переключится на него и примет.

Вы можете найти Javadoc для целого ExpectedConditions класс here.

0

К сожалению AlertIsPresent не существует в C# API http://selenium.googlecode.com/git/docs/api/dotnet/index.html

Вы можете использовать что-то вроде этого:

private static bool TryToAcceptAlert(this IWebDriver driver) 
{ 
    try 
    { 
     var alert = driver.SwitchTo().Alert(); 
     alert.Accept(); 
     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 


public static void AcceptAlert(this IWebDriver driver, int timeOutInSeconds = ElementTimeout) 
{ 
    new WebDriverWait(driver, TimeSpan.FromSeconds(timeOutInSeconds)).Until(
     delegate { return driver.TryToAcceptAlert(); } 
     ); 
} 
+0

Спасибо за ответ, но я использую java, это способ найти метод AlertIsPresent. – user2346307