現在、1 つのローカル ハブと 2 つのローカル ノードを備えた Selenium グリッド セットアップがあります。ハブは、テストを分散して並行して実行し、それをノードに分散することができます。テストを並行して実行しています。
以下は基本テストです
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: org.openqa.selenium.remote.HttpCommandExecutor の RemoteWebDriver。 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572) で実行 (HttpCommandExecutor.java:158) org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:352) で org.openqa org.openqa.selenium の .selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:393)。org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) での invokeTestMethods(Invoker.java:1166) org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) での java.util.concurrent.ThreadPoolExecutor .runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) TEST FAILED: test2 FAILED REASON:セッション ID がヌルです。quit() を呼び出した後に WebDriver を使用していますか? java.lang.Thread.run(Thread.java:745) で run(ThreadPoolExecutor.java:615) テストに失敗しました: test2 に失敗しました 理由: セッション ID が null です。quit() を呼び出した後に WebDriver を使用していますか? java.lang.Thread.run(Thread.java:745) で run(ThreadPoolExecutor.java:615) テストに失敗しました: test2 に失敗しました 理由: セッション ID が null です。quit() を呼び出した後に WebDriver を使用していますか?
それは誰かが知っていることですか?
前もって感謝します!