Selenium webdriver 警报不';使用Selenium WebDriver和Google Chrome关闭。

Selenium webdriver 警报不';使用Selenium WebDriver和Google Chrome关闭。,selenium-webdriver,selenium-chromedriver,Selenium Webdriver,Selenium Chromedriver,我有以下用于在rediff.com上打开警报的Selenium脚本: 公共类TestC{ 公共静态void main(字符串[]args)引发InterruptedException,异常{ System.setProperty(“webdriver.chrome.driver”、“driver/chromedriver.exe”); WebDriver驱动程序=新的ChromeDriver(); 驱动程序。获取(“http://www.rediff.com/"); driver.findEle

我有以下用于在rediff.com上打开警报的Selenium脚本:

公共类TestC{
公共静态void main(字符串[]args)引发InterruptedException,异常{
System.setProperty(“webdriver.chrome.driver”、“driver/chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
驱动程序。获取(“http://www.rediff.com/");
driver.findElement(By.xpath(“/*[@id='signin_info']]/a[1]”)。单击();
driver.findElement(By.id(“btn_登录”))。单击();
睡眠(5000);
Alert Alert=驱动程序.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

我很确定你的问题很常见,这就是为什么我从不建议使用
Thread.sleep()
,因为它不能保证代码只在出现
警报时运行,而且即使出现警报,也可能会增加测试时间

下面的代码应该只等待页面上显示一些警报,我建议您也使用Firefox和IE9

公共类TestC{
公共静态void main(字符串[]args)引发InterruptedException,异常{
System.setProperty(“webdriver.chrome.driver”、“driver/chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
WebDriverWait wait=新的WebDriverWait(驱动程序,5);
驱动程序。获取(“http://www.rediff.com/");
driver.findElement(By.xpath(“/*[@id='signin_info']]/a[1]”)。单击();
driver.findElement(By.id(“btn_登录”))。单击();
wait.until(ExpectedConditions.alertIsPresent());
Alert Alert=驱动程序.switchTo().Alert();
alert.accept();
}
}
这里所做的大部分工作都是更改
Thread.sleep()
,因为这种情况实际上只会在页面中出现
alert()
时才会在代码上向前移动。一旦有人这样做了,它就会切换到它并接受


您可以找到整个
ExpectedConditions
类的Javadoc。

我很确定您的问题很常见,这就是为什么我从不建议使用
Thread.sleep()
,因为它不能保证代码只在出现
警报时运行,此外,即使显示警报,也可能会增加测试时间

下面的代码应该只等待页面上显示一些警报,我建议您也使用Firefox和IE9

公共类TestC{
公共静态void main(字符串[]args)引发InterruptedException,异常{
System.setProperty(“webdriver.chrome.driver”、“driver/chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
WebDriverWait wait=新的WebDriverWait(驱动程序,5);
驱动程序。获取(“http://www.rediff.com/");
driver.findElement(By.xpath(“/*[@id='signin_info']]/a[1]”)。单击();
driver.findElement(By.id(“btn_登录”))。单击();
wait.until(ExpectedConditions.alertIsPresent());
Alert Alert=驱动程序.switchTo().Alert();
alert.accept();
}
}
这里所做的大部分工作都是更改
Thread.sleep()
,因为这种情况实际上只会在页面中出现
alert()
时才会在代码上向前移动。一旦有人这样做了,它就会切换到它并接受


您可以找到整个
ExpectedConditions
类的Javadoc。

不幸的是,C#API中不存在AlertIsPresent

您可以使用以下内容:

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(); }
        );
}

不幸的是,C#API中不存在AlertIsPresent

您可以使用以下内容:

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(); }
        );
}

您正在使用哪个版本的chromedriver.exe?如果您使用的是chromedriver2,我认为警报处理无法与Chrome26一起工作。是的。我已经使用驱动程序更改解决了我的问题。现在警报在我的脚本中关闭得非常好。您使用的是哪个版本的chromedriver.exe?如果您使用的是chromedriver2,我认为警报处理无法与Chrome26一起工作。是的。我已经使用驱动程序更改解决了我的问题。现在,警报在我的脚本中关闭得非常好。感谢您的回答,但我使用的是java,这是我找到AlertIsPresent方法的方式。感谢您的回答,但我使用的是java,这是我找到AlertIsPresent方法的方式。