2017-04-07 14 views
0

TestNG xmlファイルを使用して、テストキューと環境パラメータを管理します。 WebdriverManagerライブラリを使用して、システム内のドライバを登録したいと考えています。しかしスレッド数が1以上の場合、ドライバは正しく登録されません。下記を参照してください。WebdriverManagerを使用して複数のテストスレッドにドライバを登録する際のエラー

テスト1:ここinstanseについては

は、テストの設定やドライバのインスタンス化の一例である

<suite name="project"> 
    <test name = "Wiki search tests" verbose="1" parallel="true"> 
     <parameter name="browserName" value="firefox" /> 
     <classes> 
      <class name="project.tests.WikiSearchTest"/> 
     </classes> 
    </test> 
</suite> 

テスト2:

<suite name="project"> 
    <test name = "Wiki authorization tests" verbose="1" parallel="true"> 
     <parameter name="browserName" value="chrome" /> 
     <classes> 
      <class name="project.tests.LoginTest"/> 
     </classes> 
    </test> 
</suite> 

あなたが見ることができるように、両方の「browserNameを持っています"パラメタですが、値は異なります。試験基本クラスに登録するドライバの 例:設定

private static final CountDownLatch latch = new CountDownLatch(1); 

@Parameters({"browserName"}) 
@BeforeTest 
public void setUp(@Optional String browserName) throws InterruptedException{ 
    switch (browserName) { 
     case "firefox" : 
      FirefoxDriverManager.getInstance().setup(); 
      latch.countDown(); 
      System.out.println(" in firefox"); 
      break; 
     case "chrome" : 
      ChromeDriverManager.getInstance().setup(); 
      latch.countDown(); 
      System.out.println(" in chrome"); 
      break; 
    } 
    latch.await(); 

シュアプラグインスレッド:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>${surefire.version}</version> 

     <configuration> 
       <properties> 
       <property> 
        <name>suitethreadpoolsize</name> 
        <value>2</value> 
       </property> 

試験はsuitethreadpoolsizeプロパティの値= 1で実行すると、すべてが完璧に動作:

Running TestSuite 
[2017-04-10 11:32:45:490] [main] INFO BrowserManager - Reading https://chromedriver.storage.googleapis.com/ to seek [chromedriver] 
[2017-04-10 11:32:46:172] [main] INFO BrowserManager - Latest version of [chromedriver] is 2.29 
[2017-04-10 11:32:46:190] [main] INFO BrowserManager - Exporting webdriver.chrome.driver as C:\Users\bnesteruk\.m2\repository\webdriver\chromedriver\win32\2.29\chromedriver.exe 
in chrome 
Starting ChromeDriver 2.29.461591 (62ebf098771772160f391d75e589dc567915b233) on port 11014 


[2017-04-10 11:32:49:314] [main] INFO BrowserManager - Reading https://api.github.com/repos/mozilla/geckodriver/releases to seek [wires, geckodriver] 
[2017-04-10 11:32:49:590] [main] INFO BrowserManager - Latest version of [wires, geckodriver] is 0.15.0 
[2017-04-10 11:32:49:649] [main] INFO BrowserManager - Exporting webdriver.gecko.driver as C:\Users\bnesteruk\.m2\repository\webdriver\geckodriver\win64\0.15.0\geckodriver.exe 
in firefox 

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.831 sec - in TestSuite 

問題:

私は、スレッドが確実なプラグインでの1以上を数える設定した場合

<property> 
     <name>suitethreadpoolsize</name> 
     <value>4</value> 
</property> 

両方.setup()メソッドは、並行して実行し、BrowserManagerの中webdriverをの静的インスタンスは、単に最後のブラウザ名(geckodriverで置き換えられているようです私の例)

[2017-04-10 11:38:00:726] [pool-1-thread-1] INFO BrowserManager - Reading https://api.github.com/repos/mozilla/geckodriver/releases to seek [wires, geckodriver] 
[2017-04-10 11:38:00:726] [pool-1-thread-2] INFO BrowserManager - Reading https://api.github.com/repos/mozilla/geckodriver/releases to seek [wires, geckodriver] 
[2017-04-10 11:38:01:301] [pool-1-thread-2] INFO BrowserManager - Latest version of [wires, geckodriver] is 0.15.0 
[2017-04-10 11:38:01:301] [pool-1-thread-1] INFO BrowserManager - Latest version of [wires, geckodriver] is 0.15.0 
[2017-04-10 11:38:01:361] [pool-1-thread-2] INFO BrowserManager - Exporting webdriver.gecko.driver as C:\Users\bnesteruk\.m2\repository\webdriver\geckodriver\win64\0.15.0\geckodriver.exe 
[2017-04-10 11:38:01:361] [pool-1-thread-1] INFO BrowserManager - Exporting webdriver.gecko.driver as C:\Users\bnesteruk\.m2\repository\webdriver\geckodriver\win64\0.15.0\geckodriver.exe 
in chrome 
in firefox 
[WARNING] [11:38:01.496] The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html 

私は間違った方法でCountDownLatchを使用していると思いますか?これをどうやって止めることができますか?

答えて

0

WebDriverManagerが動作している間、Java CountDownLatchを使用して待機することができます。このような何か(もちろん、あなたのコードに適応):

// Latch declaration (maybe as a class field) 
CountDownLatch latch = new CountDownLatch(1); 

// Somewhere in your code, you call to WebDriverManabger 
ChromeDriverManager.getInstance().setup(); 
latch.countDown(); 

// In some other place in your code, you instantiate a WebDriver object 
latch.await(); 
WebDriver chrome = new ChromeDriver(); 
+0

あなたボニガルシアをありがとう、私は間違った方法でされたCountDownLatchを使用しているようですか?この問題の包括的なコード例を最初の質問 – BohdanN

+0

に再現しました。 'WebDriver'インスタンス化の直前に' latch.await(); 'を呼び出しました。私はあなたの '@ Test'コードであると仮定します。あなたが提供したスニペットにはありません。 –

0

問題が、おかげでセクションを登録ドライバーに簡単な同期(BrowserManagerの)セクションを追加することによって解決されています!

synchronized (BrowserManager.class) { 
      switch (browserName) { 
       case "firefox": 
        FirefoxDriverManager.getInstance().setup(); 
        System.out.println("Registering FIREFOX"); 
        break; 
       case "chrome": 
        ChromeDriverManager.getInstance().setup(); 
        System.out.println("Registering CHROME"); 
        break; 
      } 
     } 

出力:

Running TestSuite 
Registering CHROME 
[2017-04-10 12:34:51:913] [pool-1-thread-2] INFO BrowserManager - Reading https://chromedriver.storage.googleapis.com/ to seek [chromedriver] 
[2017-04-10 12:34:52:604] [pool-1-thread-2] INFO BrowserManager - Latest version of [chromedriver] is 2.29 
[2017-04-10 12:34:52:624] [pool-1-thread-2] INFO BrowserManager - Exporting webdriver.chrome.driver as C:\Users\bnesteruk\.m2\repository\webdriver\chromedriver\win32\2.29\chromedriver.exe 
Registering FIREFOX 
[2017-04-10 12:34:53:206] [pool-1-thread-1] INFO BrowserManager - Reading https://api.github.com/repos/mozilla/geckodriver/releases to seek [wires, geckodriver] 
[2017-04-10 12:34:53:487] [pool-1-thread-1] INFO BrowserManager - Latest version of [wires, geckodriver] is 0.15.0 
[2017-04-10 12:34:53:505] [pool-1-thread-1] INFO BrowserManager - Exporting webdriver.gecko.driver as C:\Users\bnesteruk\.m2\repository\webdriver\geckodriver\win64\0.15.0\geckodriver.exe 
関連する問題