【发布时间】:2014-12-16 05:07:12
【问题描述】:
目前,我有一个 Selenium 网格设置,有 1 个本地集线器和 2 个本地节点。集线器能够分发测试以并行运行并将其分发到节点。我正在并行运行测试。
以下是基础测试
public abstract class BaseTest
{
String testFolder;
String testName;
protected String envName;
protected Configuration config;
protected String host;
protected RemoteWebDriver driver;
protected String proxy;
protected SomeData someData;
protected SomeController someController;
public BaseTest() {
}
public BaseTest( String testFolder, String testName)
{
this.testFolder = testFolder;
this.testName = testName;
this.envName = System.getProperty("config");
this.proxy = System.getProperty("proxy");
config = this.envName;
}
@BeforeMethod
public void startTest(Method testMethod) {
LOG.info("Starting test: " + testMethod.getName());
try {
this.someData = new SomeData();
this.driver = WebDriverSetup.getDriver();
this.someController = new someController(this.driver, this.someData);
driver.navigate().to("https://" + this.host);
} catch (MalformedURLException e) {
System.out.println("MalformedURLException");
}
}
@AfterMethod
public void closeWindow() {
driver.close();
driver.quit();
}
}
以下是获取RemoteWebDriver的类:
public class WebDriverSetup {
public static RemoteWebDriver getDriver() throws MalformedURLException{
String SELENIUM_HUB_URL = "http://localhost:4444/wd/hub";
ThreadLocal<RemoteWebDriver> remoteWebDriver = null;
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
String proxy = System.getProperty("proxy");
if (proxy != null && !proxy.isEmpty()) {
System.out.println("Using proxy: " + proxy);
capabilities.setCapability(CapabilityType.PROXY, proxy);
}
try {
remoteWebDriver = new ThreadLocal<RemoteWebDriver>();
remoteWebDriver.set(new RemoteWebDriver(new URL(SELENIUM_HUB_URL),
capabilities));
} catch (MalformedURLException e) {
System.out.println("Tackle Issue with RemoteDriverSetup");
}
remoteWebDriver.get().manage().window()
.setSize(new Dimension(2880, 1524));
remoteWebDriver.get().manage().timeouts()
.pageLoadTimeout(10, TimeUnit.SECONDS);
remoteWebDriver.get().manage().timeouts()
.implicitlyWait(10, TimeUnit.SECONDS);
return remoteWebDriver.get();
}
}
我的测试套件是这样的:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Multiple Tests Suite" verbose="1" parallel="methods">
<test name="Test1">
<classes>
<class name="com.itesteverything.qa.Tests"></class>
</classes>
</test>
</suite>
测试就像:
public class Tests extends BaseTest {
@Parameters({"testName", "env" })
public Tests( @Optional String testName, @Optional String env ) {
super( null, testName, null, env );
}
@BeforeMethod
public void setup() throws Exception {
//setSomeData
}
public void test1() throws Exception {
use driver from super
use someData from super
use someController is using the driver from super
}
public void test2() throws Exception {
use driver from super
use someData from super
use someController is using the driver from super
}
在运行这些测试时,我收到以下错误
构建信息:版本:'2.44.0',修订:'76d78cf323ce037c5f92db6c1bba601c2ac43ad8',时间:'2014-10-23 13:11:40' 驱动程序信息:driver.version:RemoteWebDriver org.openqa.selenium.remote.SessionNotFoundException:会话 ID 为空。调用 quit() 后使用 WebDriver? 构建信息:版本:'2.44.0',修订:'76d78cf323ce037c5f92db6c1bba601c2ac43ad8',时间:'2014-10-23 13:11:40' 驱动程序信息:driver.version:RemoteWebDriver 在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393) 在 org.openqa.selenium.By$ById.findElement(By.java:214) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:344) 在 org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:59) 在 com.sun.proxy.$Proxy25.sendKeys(未知来源) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80) 在 org.testng.internal.Invoker.invokeMethod(Invoker.java:673) 在 org.testng.internal.Invoker.invokeTestMethod(Invoker.java:842) 在 org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1166) 在 org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745) 测试失败:test2 失败原因:会话 ID 为空。调用 quit() 后使用 WebDriver?
有人知道吗?
提前致谢!
【问题讨论】:
标签: selenium-webdriver selenium-grid remotewebdriver parallel-testing