【发布时间】: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