java - Error registering drivers in multiple test threads using WebdriverManager -


i use testng xml files manage test queues , environment parameters. , use webdrivermanager library register drivers in system. whet thread count more 1, drivers not registered properly. please see below.

for instanse here example of tests config , driver instantiating:

test 1:

<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> 

test 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> 

as can see, both have "browsername" parameter, different values in it. example of driver registering in test base class:

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(); 

surefire plugin threads setting:

 <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> 

when tests run value = 1 suitethreadpoolsize property, works perfectly:

running testsuite [2017-04-10 11:32:45:490] [main] info browsermanager - reading https://chromedriver.storage.googleapis.com/ seek [chromedriver] [2017-04-10 11:32:46:172] [main] info browsermanager - latest version of [chromedriver] 2.29 [2017-04-10 11:32:46:190] [main] info browsermanager - exporting webdriver.chrome.driver 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 seek [wires, geckodriver] [2017-04-10 11:32:49:590] [main] info browsermanager - latest version of [wires, geckodriver] 0.15.0 [2017-04-10 11:32:49:649] [main] info browsermanager - exporting webdriver.gecko.driver 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 

the problem:

if set threads count more 1 in surefire plugin,

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

both .setup() methods run in parallel , seems static instance of webdriver in browsermanager replaced last browser name (geckodriver in example)

 [2017-04-10 11:38:00:726] [pool-1-thread-1] info browsermanager - reading https://api.github.com/repos/mozilla/geckodriver/releases 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 seek [wires, geckodriver] [2017-04-10 11:38:01:301] [pool-1-thread-2] info browsermanager - latest version of [wires, geckodriver] 0.15.0 [2017-04-10 11:38:01:301] [pool-1-thread-1] info browsermanager - latest version of [wires, geckodriver] 0.15.0 [2017-04-10 11:38:01:361] [pool-1-thread-2] info browsermanager - exporting webdriver.gecko.driver 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 c:\users\bnesteruk\.m2\repository\webdriver\geckodriver\win64\0.15.0\geckodriver.exe  in chrome  in firefox [warning] [11:38:01.496] path driver executable must set webdriver.chrome.driver system property; more information, see https://github.com/seleniumhq/selenium/wiki/chromedriver. latest version can downloaded http://chromedriver.storage.googleapis.com/index.html 

i guess, i'm using countdownlatch in wrong way? how can haldle this?

you can use java countdownlatch wait while webdrivermanager working. (of course adapted code):

// latch declaration (maybe class field) countdownlatch latch = new countdownlatch(1);  // somewhere in code, call webdrivermanabger chromedrivermanager.getinstance().setup(); latch.countdown();  // in other place in code, instantiate webdriver object latch.await(); webdriver chrome = new chromedriver(); 

Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -