1

現在、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 を使用していますか?

それは誰かが知っていることですか?

前もって感謝します!

4

2 に答える 2

1
    @AfterMethod

各メソッドの後に実行されています。そしてUランのオンリーワンセットアップ。したがって、最初のメソッド U が閉じた後、スタック トレースを示すように閉じられます。

于 2014-12-16T05:11:53.110 に答える