当前位置: 首页 > 知识库问答 >
问题:

如何在selenium java中使驱动程序作为线程安全地并行运行类的方法

利永年
2023-03-14

我有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创建Thread本地类

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

并通过编写在基类的setup()方法中使用它

threadSafeDriver.set(driver);

但这并没有什么帮助

共有1个答案

宫俊才
2023-03-14

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

您可以在TestNG套件中看到并行选项(请参阅文档),但无法强制TestNG为每个测试创建一个新实例。

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

 类似资料:
  • 本文向大家介绍如何在Java中使类成为线程安全的?,包括了如何在Java中使类成为线程安全的?的使用技巧和注意事项,需要的朋友参考一下 线程安全类是保证从多个线程并发调用时正确的类的内部状态以及方法返回的值的类。 HashMap是一个非同步的集合类。如果我们需要对其执行线程安全操作,则必须显式同步它。 例: 在上面的示例中,我们有一个HashMap,它具有整数键和String类型值。为了使其同步,

  • 本文向大家介绍在 Java 程序中怎么保证多线程的运行安全?相关面试题,主要包含被问及在 Java 程序中怎么保证多线程的运行安全?时的应答技巧和注意事项,需要的朋友参考一下 方法一:使用安全类,比如 Java. util. concurrent 下的类。 方法二:使用自动锁 synchronized。 方法三:使用手动锁 Lock。 手动锁 Java 示例代码如下:  

  • 问题内容: 我想在TestNg中使用@dataprovider并行运行selenium测试。理想情况下,测试是按方法并行的(一种测试=一种方法),而不是浏览器的简单套件并行性。我读过某个地方的内容,一次可以控制大约5个ChromeDriver实例,因此我认为应该可以实现。稍后,我计划移至grid2。为了进行开发,我通过右键单击+在XML配置文件上运行,使用IntelliJ Idea测试运行器运行事

  • 我有一个ScheduleTimer类,它可以处理日期数组。这是: 如果我像Java应用程序一样运行它,而不是像android一样运行,并且它在控制台中每隔一秒打印一次,那么它就可以正常工作。但是当在android环境中运行它时,它要么说UI线程不能从任何其他线程接触,要么它在类ScheduleTimer的方法中给了我null点异常。 我这样使用它:

  • Build.Gradle 分级。性质 例外情况: 代码: 有人知道怎么修吗?

  • 问题内容: 我正在尝试运行一个ruby文件,该文件将使用seleniumwebdriver启动chrome驱动程序。我有selenium独立服务器2.35.0。和chromedriver可执行文件已安装。我正在通过运行服务器来启动 两个会话正在启动,chrome驱动程序无法启动。 这是在我使用以下文件运行文件之后 我对此并不陌生,无法找出问题所在。而且,我也试图让它无头运行,所以我正在运行Xvfb