Selenium webdriver 警报不';使用Selenium WebDriver和Google Chrome关闭。
我有以下用于在rediff.com上打开警报的Selenium脚本: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
公共类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方法的方式。