我相信您要求的是多次运行单个测试,每个浏览器一次。
有不同的方法可以做到这一点......我将从最简单的开始(但将来最难维护,因此请确保在选择之前了解每个选择):
解决方案 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 = "...") 的每个方法。更多信息在这里
如果您有任何疑问,请随时发表评论。我会回应。