我正在开发一个应用程序,我们需要在其中检查 Web 应用程序是否正在运行,并且 url 给出了预期的结果。
我们的调度程序每天运行这个应用程序 12 次。在每次启动时,都会执行 firefox 驱动程序并打开一个新的浏览器窗口来执行操作。
我想要一种技术,我们打开 firefox 浏览器 1 次,并在 selenium-driver 的每次调用中重用它。
我正在开发一个应用程序,我们需要在其中检查 Web 应用程序是否正在运行,并且 url 给出了预期的结果。
我们的调度程序每天运行这个应用程序 12 次。在每次启动时,都会执行 firefox 驱动程序并打开一个新的浏览器窗口来执行操作。
我想要一种技术,我们打开 firefox 浏览器 1 次,并在 selenium-driver 的每次调用中重用它。
我实际上并不完全确定您可以切换到不是由驱动程序生成的窗口。我认为从事 selenium 2 项目的人在切换到由不同驱动程序生成的窗口方面做了一些工作。当你这样做时:
driver.getWindowHandles()
您所得到的只是由调用它的驱动程序对象产生的窗口。
这是一个相当古老的功能请求:允许 webdriver 附加到正在运行的浏览器。所以现在是不可能的。
你可以看到我写的一个例子,它证明重用浏览器在 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 实例作为参数传递给测试方法,以便线程可以访问它。