【问题标题】:Running parallel tests with RemoteDriver + SeleniumGrid使用 Remote Driver + Selenium Grid 运行并行测试
【发布时间】:2015-10-12 02:09:07
【问题描述】:

我在做什么

我正在尝试使用集成在selenium-server-standalone-2.47.1.jar 中的 Selenium-Grid 运行并行 java selenium-webdriver 测试。我打算同时运行多个 firefox 实例来执行不同的案例。顺便说一句,我不会使用 TesgNG 或 JUnit。

我做了什么

为了方便你们,我将只提供我的部分代码。

我这里有一个 Firefox 解析器。

public class FirefoxResolver implements Resolver{
    WebDriver driver;

    @Override
        public void connectHub() {
            DesiredCapabilities dc = DesiredCapabilities.firefox();

            dc.setBrowserName("firefox");

            dc.setPlatform(Platform.WINDOWS);


            try {
                URL url = new URL(BrowserFactory.HUB); //Here I am sure I connect to a correct hub

                driver = new RemoteWebDriver(url, dc);
            } catch(ANYEXCEPTION HERE) {

            }

    @Override
    public WebDriver getDriver() {

        return driver;
    }
}

这里我有一个 Main Runnable

public class MainRunner implements Runnable{
    @Override
    public void run() {
    Resolver r = BrowserFactory.getInstance().getBrowserResolver(
                        browser);

                r.connectHub();

                driver = r.getDriver();
     /************************************************
     Use driver to do something then.
     /************************************************

     **Finally here I use a driver.quit() to shutdown the driver created in current thread. I have also tried driver.close()**

    }
    }

一旦触发,我的主处理器将启动一个新线程来运行 MainRunner。我已经调试过,发现实际上生成了不同的实例“驱动程序”。

我也做过研究:

当您想要执行以下一项或两项操作时,您应该使用 Selenium Grid:

同时针对不同的浏览器、操作系统和机器运行测试。这将确保您正在测试的应用程序与各种浏览器-操作系统组合完全兼容。

节省执行测试套件的时间。如果您将 Selenium Grid 设置为一次运行 4 个测试,那么您将能够以大约 4 倍的速度完成整个套件。

问题

当我使用 Firefox 同时运行两个案例时,它们似乎共享同一个会话并相互交互。我是否将节点部署在不同的机器上。这两种情况都不会成功。似乎如果其中一种情况已经完成并调用driver.quit() 或driver.close(),另一种则无法继续执行。如果我使用driver.close(),这是堆栈跟踪信息:

线程“Thread-26”org.openqa.selenium.WebDriverException 中的异常:与远程浏览器通信时出错。它可能已经死了。

构建信息:版本:'2.47.1',修订:'411b314',时间:'2015-07-30 03:03:16' 系统信息:主机:'J.Lyu',ip:'192.168.6.71',os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.7 .0_21'

驱动信息:driver.version: EventFiringWebDriver

命令持续时间或超时:1.51 秒

构建信息:版本:'2.47.1',修订:'未知',时间:'2015-07-30 11:02:44' 系统信息:主机:'J.Lyu',ip:'192.168.6.71',os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.7 .0_21' 会话 ID:2b73c6e8-f601-4259-9646-9a53241fe074 驱动程序信息:org.openqa.selenium.remote.RemoteWebDriver 功能 [{platform=WINDOWS, javascriptEnabled=true, acceptSslCerts=true, browserName=firefox, rotatable=false, locationContextEnabled=true, webdriver.remote.sessionid=2b73c6e8-f601-4259-9646-9a53241fe074, version=40.0.3, databaseEnabled =true,cssSelectorsEnabled=true,handlesAlerts=true,webStorageEnabled=true,nativeEvents=false,applicationCacheEnabled=true,takeScreenshot=true}]

在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:525) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)

在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:618) 在 org.openqa.selenium.remote.RemoteWebDriver.close(RemoteWebDriver.java:459) 在 com.milanoo.qa.runtime.module.MainRunner.run(MainRunner.java:167) 在 java.lang.Thread.run(Thread.java:722)

原因:org.openqa.selenium.remote.UnreachableBrowserException:与远程浏览器通信时出错。它可能已经死了。 构建信息:版本:'2.47.1',修订:'411b314',时间:'2015-07-30 03:03:16' 系统信息:主机:'J.Lyu',ip:'192.168.6.71',os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.7 .0_21' 驱动程序信息:driver.version:EventFiringWebDriver 构建信息:版本:'2.47.1',修订:'未知',时间:'2015-07-30 11:02:44' 系统信息:主机:'J.Lyu',ip:'192.168.6.71',os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.7 .0_21' 驱动信息:driver.version:未知

有人可以帮忙吗?非常感谢,如果您想了解更多信息,请告诉我。

更新 2015/10/12 11:51

我试过了,即使我不使用任何关机命令(退出关闭或处置),问题仍然存在。

我检查了集线器的日志消息,然后发现后面执行的总是成功,而前面的失败(我是只启动一个节点还是两个节点,以及它们是否在不同的机器上(VM 或 RM)) .似乎与早期相关的内容已被后来开始的内容所涵盖。但到目前为止它还没有输出任何异常。前一个刚刚被屏蔽了。

【问题讨论】:

    标签: selenium selenium-webdriver webdriver selenium-grid remotewebdriver


    【解决方案1】:

    伙计们,我终于明白了。我正在使用 Spring 提供的 @Autowired 来标记我的 Runnable(MainRunner)。根据我的研究,@Autowired 注释的类是单例。都是我的错,谢谢大家的关注。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多