2013-05-08 59 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做工精細,但使用谷歌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 2013-05-09 00:16:41

+0

是的,我已經使用驅動程序更改對問題進行了排序。現在警報在我的腳本中關閉得很好。 – user2346307 2013-05-09 09:37:05

回答

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()出現在頁面中。只要有人這樣做,它就會切換到並接受。

您可以找到整個ExpectedConditionshere的Javadoc。

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 2013-05-10 10:13:40