0

我正在使用此页面上第一个答案中的代码:单击此处

我能够成功运行它并通过为许多不同的浏览器更改环境 USED_DRIVER 行来选择浏览器。

我在徘徊是否可以在完成之前对每个案例运行一次测试,也就是说,一旦我尝试使用 for 并且如果但没有非常成功,它就已经在每个选定的浏览器上进行了测试.

示例测试

driver.get("calc.php");
driver.findElement(By.name("firstnumber")).sendKeys("2");
    Thread.sleep(500);
    driver.findElement(By.name("secondnumber")).sendKeys("2");
    Thread.sleep(500);
    driver.findElement(By.name("Calculate")).click();
    Thread.sleep(500);
    driver.findElement(By.name("save")).click();
    Thread.sleep(500);
4

1 回答 1

1

我相信您要求的是多次运行单个测试,每个浏览器一次。

有不同的方法可以做到这一点......我将从最简单的开始(但将来最难维护,因此请确保在选择之前了解每个选择):

解决方案 1:最简单的方法是在测试周围放置一个 for 循环。您将拥有一个测试将在其上运行的不同 WebDriver 的列表。它看起来像这样:

WebDriver[] drivers = new WebDriver[]{firefoxDriver, chromeDriver};
for (WebDriver driver:drivers){
   ...test goes here.....
}

这种方法的问题在于,您运行的每个测试都必须有 for 循环,并且它们都将创建自己的驱动程序。

解决方案 2:您可以让一个中央方法调用您的每个测试。它看起来像这样:

public void runTests(){
   ...create your drivers here (and the array)...
   for (WebDriver driver: drivers){
      runFirstTest(driver);
      runSecondTest(driver);
   }
}

public void runFirstTest(driver){
    ...code using driver goes here....
}

这解决了在每个测试中都有一个 for 循环和创建驱动程序实例的问题,但是现在,每当你编写一个新测试时,你都必须将它添加到这个 for 循环中。

解决方案 3:存在另一种解决方案,使用测试框架。最流行的两个是 TestNG 和 JUnit。我将假设您的所有测试都在同一个类中,但是如果您有多个类,您将希望只有 1 个类具有 @DataProvider

@DataProvider(name = "drivers")
public provideDrivers(){
   ...create drivers here...
   return new Object[][]{{firefoxDriver},{chromeDriver},....};
}

@Test(dataProvider = "drivers")
public runTest(WebDriver driver){
   ...do stuff with driver here...
}

此解决方案将为您传入的每个驱动程序运行一次具有 @Test(dataProvider = "...") 的每个方法。更多信息在这里

如果您有任何疑问,请随时发表评论。我会回应。

于 2013-08-14T03:24:57.467 回答