如何使驱动程序作为线程安全,以并行运行类的方法



我有3个使用基类驱动程序的测试方法。我试图并行运行这些方法,但失败了。请回复我的问题。由于

有3个测试方法的类

public class TestCases extends BaseClass {
@Test
public void Test1() {

homePage.checkIfElementIsDisplayed(homePage.emailElement);
homePage.checkIfElementIsDisplayed(homePage.passwordElement);
homePage.checkIfElementIsDisplayed(homePage.signInElement);
homePage.emailElement.sendKeys("karteek@gmail.com");
homePage.passwordElement.sendKeys("******");
}
@Test
public void Test2() {
homePage.checkValuesInListGroup();
homePage.checkSecondListItem();
homePage.checkSecondListItemBadgeValue();

}
@Test
public void Test3() throws InterruptedException {

homePage.ScrolltotheElement(homePage.dropDownOption);
homePage.checkDefaultSelectedValue();
homePage.selectOption3();
}
}

基类

public class BaseClass {
public WebDriver driver;
public HomePage homePage;
public WebDriver setup() throws IOException {
Properties prop = new Properties();
FileInputStream fis = new FileInputStream(
System.getProperty("user.dir") + "\src\main\resource\GlobalData.Properties");
prop.load(fis);
String browserName = System.getProperty("browser") != null ? System.getProperty("browser")
: prop.getProperty("browser");
if (browserName.contains("chrome")) {
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
}
else if (browserName.contains("edge")) {
WebDriverManager.edgedriver().setup();
driver = new EdgeDriver();
} else if (browserName.contains("firefox")) {
WebDriverManager.firefoxdriver().setup();
driver = new FirefoxDriver();
}
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().window().maximize();
return driver;

}
@BeforeMethod
public HomePage LaunchApplication() throws IOException {
driver = setup();
homePage = new HomePage(driver);
homePage.goTo();
return homePage;
}
@AfterMethod
public void tearDown() throws IOException {
driver.close();

}

我尝试为WebDriver创建ThreadLocal类

ThreadLocal<WebDriver> threadSafeDriver=new ThreadLocal<WebDriver>();

并在BaseClass的setup()方法中使用

threadSafeDriver.set(driver);

但这并没有真正帮助

很可能您正在使用TestNG框架。JUnit和TestNG之间的区别之一是,JUnit默认为每个测试方法创建一个新的类实例,而TestNG为类中的所有测试方法创建一个单独的实例。

你可以在TestNG套件中看到parallel选项(参见文档),但是没有办法强制TestNG为每个测试创建一个新的实例。

最简单的解决方案是切换到JUnit框架。然后,示例中的代码应该可以工作。

最新更新