selenium - 使用 testNG 在浏览器的多个实例中并行运行一个类中的多个测试

标签 selenium webdriver testng

请告诉我使用 Web-driver + TestNG 框架的以下场景的示例代码。

一个类(class)有多个测试。在运行这些测试时,它应该一次在同一浏览器(例如:Firefox)的多个实例中并行运行所有测试。因此,对于每个测试,它都应该打开一个新的浏览器实例。

最佳答案

到目前为止我的解决方案是这样的:

public MyTestClass {
   SupportedBrowser browser;
   private static ThreadLocal<WebDriver> threadLocalDriver = new ThreadLocal<WebDriver>();

   @DataProvider (name = "getBrowsers")
   public Object[][] getBrowsers {
      return Object[][] {
          {
              SupportedBrowser.FIREFOX;
          },
          {
              SupportedBrowser.CHROME;
          }
      };
   }

   @Factory (dataProvider = "getBrowsers")
   public MyTestClass(SupportedBrowser browser) {
      this.browser = browser;
   }

   @BeforeMethod
   public void setup()
   {
      threadLocalDriver.set(browser.getDriver());
   }
   @Test
   public void test1()
   {
       WebDriver driver = threadLocalDriver.get();
       //do stuff
   }
   @AfterMethod
   public void tearDown()
   {
       WebDriver driver = threadLocalDriver.get();
       driver.quit();
   }
}

这是我的枚举:

public enum SupportedBrowser {
    FIREFOX, CHROME;  //add more as needed

    public getDriver() {
       if(this == SupportedBrowser.FIREFOX) {
           return new RemoteDriver(hubAddress, DesiredCapabilities.firefox());  //alternatively could be new FirefoxDriver()
       }
       else {
           return new RemoteDriver(hubAddress, DesiredCapabilities.chrome());
       }

    }
}

请原谅错误的代码约定,我没有在 IDE 中编写此代码(尽管我使用过类似的代码并且它有效)。 该类在每个不同的浏览器中运行一次。每个方法都有自己独立的驱动程序,确保您的测试可以同时运行。它还允许每个方法采用自己的 DataProvider,以防您需要使用不同参数多次运行测试方法。还要确保在 testng.xml 文件中将并行属性设置为“方法”级别。

我的代码的唯一问题是确保驱动程序在测试失败时退出。现在,此方法将关闭失败的测试留给selenium grid(使用-timeout)。请看我的问题:Sharing driver between @BeforeMethod and @AfterMethod in TestNG .

编辑:我现在已在代码中添加了一个 ThreadLocal 变量,该变量在整个线程中共享驱动程序,因此您可以在 @AfterMethod 中调用 driver.quit()。

关于selenium - 使用 testNG 在浏览器的多个实例中并行运行一个类中的多个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11520965/

相关文章:

selenium - WebDriver 模拟桌面浏览器中的触摸事件

java - 如何通过在 Selenium WebDriver 中搜索文本来访问链接?

webdriver - 使用 C# 在 WebDriver 中打开新窗口

java - 查找匹配多个文本的 Xpath

java - 从上次测试中恢复测试用例

java - 初始化 Selenium 页面对象,最佳实践

java - 通过 selenium 选择一个 javascript 下拉列表?

java - Selenium webdriver 和多语言

java - Selenium TestNG 测试依赖于其他方法

java - 使用 Spring 使用 testNG(Selenium) 运行测试时无法维护两个并行 session ?