【问题标题】:Selenium Parallel Testing - Running 2 methods from the same ClassSelenium 并行测试 - 从同一类运行 2 种方法
【发布时间】:2019-01-11 17:37:10
【问题描述】:

我有一个 java 类,可以打开两个 Chrome 浏览器,分别搜索“test 1”和“test 2”。但是,一旦两个浏览器都打开,只有一个带有 google 页面的浏览器会搜索“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”。任何帮助表示赞赏!如果可能的话,我仍然想使用我的父类“方法”,因为它包含很多我用于其他真实测试用例的方法。

提前致谢。

【问题讨论】:

  • 请编辑您的问题并向我们展示googleTestClass 的课程是什么样的?
  • 更新了!感谢您的建议。
  • Methods 类是什么样的?请帮助提供所有信息,以便我们帮助您解决问题。
  • 我已更新为包含我的整个方法类的缩短版本。删除了 googleTestClass 中没有提到的一些方法

标签: java selenium parallel-processing testng


【解决方案1】:

问题在于您的测试代码。 WebDriver 对象被声明为静态对象。

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

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

【讨论】:

  • 您好,是否可以有另一个 BeforeMethod 来执行两种测试方法之间的所有常见步骤?例如,我想要一个设置浏览器、转到 URL 等的 BeforeMethod。当我尝试这样做时,由于在 before 方法中调用了一个新对象,我遇到了 NullPointer 错误。任何帮助,将不胜感激!谢谢。
  • 请您打开一个新问题,并为您的新查询提供详细示例。
  • 嗨 Krishnan,我能够在另一个线程上回答这个问题,再次感谢您的帮助!
【解决方案2】:

由于类中驱动程序对象的static 声明,当第二个测试调用launchBrowser() 时,它会被覆盖并行执行。

显然,删除 static 将解决此问题,但当您的测试台和方法增加时,您仍然会遇到管理驱动程序的不同问题。

我建议使用任何满足此类要求的TestNG extension。我们正在使用QAF,它基于 TestNG 构建,并提供驱动程序管理、资源管理和更多对 web/mobile/webservices 测试至关重要的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    相关资源
    最近更新 更多