使用RemoteDriver + SeleniumGrid运行并行测试

时间:2015-10-12 02:09:07

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

我在做什么

我正在尝试使用集成在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;
    }
}

这里我有一个主要的可运行的

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。我调试过,发现实际上有不同的实例' driver'产生。

我也做过研究:

如果您想要执行以下一项或两项操作,则应使用Selenium Grid:

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

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

问题

当我使用firefox同时运行两个案例时,它们似乎共享相同的会话并相互交互。我是否在不同的机器上部署节点。其中一个案例都不会成功。似乎如果其中一个案例已完成并调用driver.quit()driver.close(),则另一个案例无法继续执行。如果我使用driver.close()

,这是堆栈跟踪信息
  

线程中的异常"线程-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:&# 39; 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:&# 39; 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,rotate = 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,takesScreenshot = true}]

     

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)       at 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)

     

at 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:&# 39; 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:&# 39; x86',os.version:' 6.1',java.version:' 1.7.0_21'   驱动程序信息:driver.version:未知

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

更新2015/10/12 11:51

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

我检查了集线器的日志消息然后发现后来执行的一个将永远成功而前一个失败(我是否只启动一个节点或两个节点以及它们是否在不同的机器(VM或RM)) 。似乎与后一个相关的东西被后来开始的东西覆盖了。但到目前为止它还没有输出任何异常。早先的一个刚被阻止。

1 个答案:

答案 0 :(得分:0)

伙计们我终于说明了这一点。我正在使用Spring提供的 @Autowired 来标记我的Runnable(MainRunner)。根据我的研究,由@Autowired注释的类是单身。这都是我的错,感谢你们的关注。