java - Selenium 并行测试 - 运行同一个类中的 2 个方法

标签 java selenium parallel-processing testng

我有一个 java 类,它打开两个 Chrome 浏览器,分别搜索“test 1”和“test 2”。然而,一旦两个浏览器都打开,只有一个具有谷歌页面的浏览器会搜索“test 1 test 2”。

我相信这个问题可能是因为我从父类调用 driver = new WebDriver 。但是,我不确定如何解决该问题。

这是我尝试并行运行的两个方法。

package webDrivertests;

public class googleTestClass extends Methods{

    @Test
    public void test1() throws InterruptedException {

        googleTestClass object1;
        object1 = new googleTestClass();
        object1.launchBrowser();
        object1.goToURL("https://www.google.com");
        object1.enterValue("name","q","google test 1");
        driver.quit();
    }

    @Test
    public void test2() throws InterruptedException {

        googleTestClass object2;
        object2 = new googleTestClass();
        object2.launchBrowser();
        object2.goToURL("https://www.google.com");
        object2.enterValue("name","q","google test 2");
        driver.quit();
    }
}

这是我用来调用它们的 xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">
  <test thread-count="2" name="Test" parallel="methods">
    <classes>
      <class name="webDrivertests.googleTestClass"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

包含驱动程序的父方法

package webDrivertests;

// import statements

public class Methods {

    public static WebDriver driver;

    public void launchBrowser() {

         System.setProperty("webdriver.chrome.driver","C:\\chromedriver_win32\\chromedriver.exe");
        System.setProperty("webdriver.chrome.args", "--disable-logging");
        System.setProperty("webdriver.chrome.silentOutput", "true");
        driver = new ChromeDriver();
    }

    public void goToURL(String url) {
        driver.get(url);
    }

        public void enterValue(String htmltype, String identifier, String value) throws InterruptedException {
        if (htmltype == "id") {
            WebElement element = driver.findElement(By.id(identifier));
            element.clear();
            element.sendKeys(value);
            element.submit();
        }
        if (htmltype =="name") {
            WebElement element = driver.findElement(By.name(identifier));
            element.clear();
            element.sendKeys(value);
            element.submit();
        }

        Thread.sleep(3000);
    }

}

当前结果:打开两个浏览器并分别访问 google.com。然而,只有一个浏览器会搜索“test 1 test 2”。任何帮助表示赞赏!如果可能的话,我仍然想使用我的父类“Methods”,因为它包含许多我用于其他实际测试用例的方法。

提前致谢。

最佳答案

问题出在你的测试代码上。 WebDriver 对象被声明为静态对象。

因此这会导致每个测试方法共享同一个实例。

要解决此问题,请从 Methods 类的 WebDriver 声明中删除 static 关键字,然后重试。

关于java - Selenium 并行测试 - 运行同一个类中的 2 个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54151486/

相关文章:

python - 使用 Python 并行获取图像并异步保存它们

java - 如何在java中使用数组在一行中设置多个选择条件?

java - 在 nodejs 中获取 socket.io 选项的查询

java - 来自不同存储库的两个 Maven 依赖项

selenium - 在 Selenium IDE 中,我可以存储一个元素以在后续断言中使用吗?

function - Julia,多次运行函数,将结果保存在数组中

java - 自制的 SocketImplFactory 导致空指针

java - 将 MariaDB 与 Hibernate Filter 结合使用时,如何获取 AssertionFailure 'Table not found' 的根本原因?

php - 包括安装 PEAR/PHPUnit 的路径问题

java - Flink Kafka - 如何使应用程序并行运行?