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
Post a Comment