我正在开发一个应用程序,我们需要检查Web应用程序是否正在运行,以及提供预期结果的URL。
我们的计划程序每天运行此应用程序12次。在每次启动时,firefox驱动程序都会被执行,并打开一个新的浏览器窗口来执行操作。
我想要一种技术,我们打开firefox浏览器一次,并在selenium-driver的每次调用中重复使用它。
答案 0 :(得分:7)
我实际上并不完全确定您可以切换到不是由驱动程序生成的窗口。我认为参与selenium 2项目的人们已经开始尝试切换到由不同驱动程序生成的窗口。当你这样做时:
driver.getWindowHandles()
所有你得到的是被调用它的驱动程序对象产生的窗口。
这是一个非常古老的功能请求:Allow webdriver to attach to a running browser。所以现在不可能。
答案 1 :(得分:5)
您可以看到an example I wrote证明重复使用浏览器在WebDriver中运行良好。基本上,只要从WebDriver实例化浏览器窗口,就可以使用getWindowHandles()来抓取它。如果您打开了多个窗口,只需使用List跟踪它们。您可以使用各种WebDriver方法识别以某种方式显示或包含某些信息的窗口。
换句话说,如果WebDriver没有打开浏览器窗口,那么WebDriver就无法挂钩它。
一个粗略的例子:
public static boolean selectWindow(WebDriver driver, String windowTitle){
//Search ALL currently available windows
for (String handle : driver.getWindowHandles()) {
String newWindowTitle = driver.switchTo().window(handle).getTitle();
if(newWindowTitle.equalsIgnoreCase(windowTitle))
//if it was found break out of the wait
return true;
}
return false;
}
在我做的一个项目中,我创建了一个返回某些int状态代码的方法,具体取决于我的窗口排列。如果状态代码是我期望的,那么我知道下一个测试可以继续而无需再次登录或没有打开新窗口。
当然,如果您的测试框架(如Surefire或TestNG)按类分叉线程,那么每个类需要一个webdriver实例。如果您的测试框架按方法分叉,那么您需要将webdriver实例作为参数传递给测试方法,以便线程可以访问它。