有没有办法将已运行的浏览器附加到java中的selenium webdriver?

Sat*_*dey 7 java selenium-webdriver

我正在开发一个应用程序,我们需要检查Web应用程序是否正在运行以及提供预期结果的URL.

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

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

som*_*guy 7

我实际上并不完全确定你可以切换到一个没有被驱动程序生成的窗口.我认为参与selenium 2项目的人们已经开始尝试切换到由不同驱动程序生成的窗口.当你这样做时:

driver.getWindowHandles()
Run Code Online (Sandbox Code Playgroud)

你得到的只是它被调用的驱动程序对象产生的窗口.

这是一个非常古老的功能请求:允许webdriver连接到正在运行的浏览器.所以现在不可能.


dja*_*fan 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;

}
Run Code Online (Sandbox Code Playgroud)

在我做的一个项目中,我创建了一个返回某些int状态代码的方法,具体取决于我的窗口排列.如果状态代码是我期望的,那么我知道下一个测试可以继续而无需再次登录或不打开新窗口.

当然,如果您的测试框架(如Surefire或TestNG)按类分叉线程,那么每个类需要一个webdriver实例.如果您的测试框架按方法分叉,那么您需要将webdriver实例作为参数传递给测试方法,以便线程可以访问它.