Я хочу выполнить тест параллельно. У меня есть PageFactory Framework. Когда я выполняю сценарии параллельно, все становится грязно. Экземпляр драйвера перезаписывается.
LocalDriveFactory.Java
package com.pom.framework;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import com.pom.listeners.TestListener;
import io.github.bonigarcia.wdm.WebDriverManager;
public class LocalDriverFactory {
protected String WORKINGDIR = System.getProperty("user.dir");
static {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy-hh-mm-ss");
String logPath = System.getProperty("user.dir")+"/Log";
System.setProperty("current.date.time", dateFormat.format(new Date()));
System.setProperty("logPath", logPath);
}
static WebDriver createInstance(String browser) {
WebDriver wbDriver= null;
EventFiringWebDriver driver;
TestListener eventListener;
JavascriptExecutor js;
if(browser.equals("FF")) {
WebDriverManager.firefoxdriver().arch32().setup();
wbDriver=new FirefoxDriver();
}else if(browser.equals("Chrome")) {
WebDriverManager.chromedriver().setup();;
wbDriver=new ChromeDriver();
}
driver = new EventFiringWebDriver(wbDriver);
eventListener = new TestListener();
driver.register(eventListener);
js = (JavascriptExecutor)wbDriver;
return driver;
}
public void navigate(String url) {
LocalDriverManager.getDriver().navigate().to(url);
}
}
LocalDriverManager.java
package com.pom.framework;
import org.openqa.selenium.WebDriver;
public class LocalDriverManager {
private static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
public static WebDriver getDriver() {
return webDriver.get();
}
static void setWebDriver(WebDriver driver) {
webDriver.set(driver);
}
}
реализован IInvokedMethodListener для вызова метода createInstance () DriverManager, как показано ниже -
public class WebDriverListener extends LocalDriverFactory implements IInvokedMethodListener {
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
if (method.isTestMethod()) {
String browserName = method.getTestMethod().getXmlTest().getLocalParameters().get("browserName");
System.out.println(browserName);
WebDriver driver = LocalDriverFactory.createInstance(browserName);
LocalDriverManager.setWebDriver(driver);
}
}
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
if (method.isTestMethod()) {
WebDriver driver = LocalDriverManager.getDriver();
if (driver != null) {
driver.quit();
}
}
}
}
образец тестового скрипта -
public class TestScript1{
@Test
@Parameters("URL")
void firstMethod(String url) {
WebDriver driver = LocalDriverManager.getDriver();
driver.get(url);
driver.manage().window().maximize();
HomePage hp = new HomePage(driver);
}
HomePage.java
public class HomePage {
private WebDriver driver;
public HomePage(WebDriver driver){
this.driver = driver;
PageFactory.initElements(driver, this);
}
WebElements & methods
}
драйвер перезаписывается при вызове метода страницы. У меня есть тестовый класс, который содержит более одного @Test
Как мы можем выполнить тестирование параллельно, используя PageFactrory?