7

我正在开发一个应用程序,我们需要在其中检查 Web 应用程序是否正在运行,并且 url 给出了预期的结果。

我们的调度程序每天运行这个应用程序 12 次。在每次启动时,都会执行 firefox 驱动程序并打开一个新的浏览器窗口来执行操作。

我想要一种技术,我们打开 firefox 浏览器 1 次,并在 selenium-driver 的每次调用中重用它。

4

2 回答 2

7

我实际上并不完全确定您可以切换到不是由驱动程序生成的窗口。我认为从事 selenium 2 项目的人在切换到由不同驱动程序生成的窗口方面做了一些工作。当你这样做时:

driver.getWindowHandles()

您所得到的只是由调用它的驱动程序对象产生的窗口。

这是一个相当古老的功能请求:允许 webdriver 附加到正在运行的浏览器。所以现在是不可能的。

于 2012-08-21T07:39:22.777 回答
5

你可以看到我写的一个例子,它证明重用浏览器在 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 实例作为参数传递给测试方法,以便线程可以访问它。

于 2012-12-24T20:04:22.160 回答