我正在与SauceLab和Jenkins使用一个TestNG脚本。我坚持一个问题。当我从Jenkins运行项目时,我将从那里选择浏览器,因此可以将其与“ dataProvider”一起使用,但是dataProvider仅与@Test批注一起使用,我想将dataProvider与@before一起使用。
脚步:
@Before将初始化驱动程序(Webdriver)对象。
@Test与执行带有驱动程序对象的第一个测试用例。
@Test(2nd)与具有相同驱动程序对象的第二个测试用例一起执行。
public class test
{
Webdriver driver;
// Over here I want to use @Before
@Test(dataProvider = "dynamicParameters", priority = 0, alwaysRun = true)
public void init(String browser, String version, String os, Method method) throws Exception
{
System.out.println("Init Method");
String BASE_URL = System.getProperty("baseUrl");
PCRUtils pcrUtils = new PCRUtils();
driver = pcrUtils.createDriver(browser, version, os, method.getName());
driver.get(BASE_URL);
driver.manage().window().maximize();
Thread.sleep(50000);
}
@Test(priority = 1)
public void verifyTitle() throws InterruptedException
{
AccountPage accountPage = new AccountPage();
accountPage.verifyTitle(driver);
}
}
最佳答案
TestNG的“ @before”方法不能直接与@DataProvider
一起使用。@BeforeMethod
可以访问参数列表(TestNG - 5.18.1 - Native dependency injection):
任何@BeforeMethod都可以声明Object[]
类型的参数。此参数将接收即将馈入即将到来的测试方法的参数列表,该列表可以由TestNG注入,例如java.lang.reflect.Method
或来自@DataProvider
但是@BeforeMethod
“将在每个测试方法之前运行”,而您想要的更像@BeforeClass
,它“将在调用当前类中的第一个测试方法之前运行”(TestNG - 2 - Annotations)。不幸的是,@BeforeClass
无法像@BeforeMethod
一样通过TestNG的本机依赖项注入来访问参数列表。
但是,可以使用@Factory
通过@DataProvider
完成数据驱动的初始设置。例如。:
public class test
{
WebDriver driver;
@Factory(dataProvider = "dynamicParameters")
public test(String browser, String version, String os, Method method) throws Exception
{
System.out.println("Init Method");
String BASE_URL = System.getProperty("baseUrl");
PCRUtils pcrUtils = new PCRUtils();
driver = pcrUtils.createDriver(browser, version, os, method.getName());
driver.get(BASE_URL);
driver.manage().window().maximize();
Thread.sleep(50000);
}
@Test(priority = 1)
public void verifyTitle() throws InterruptedException
{
AccountPage accountPage = new AccountPage();
accountPage.verifyTitle(driver);
}
@Test(priority = 2)
public void verifySomethingElse() throws InterruptedException
{
// execute second test case with same driver object.
}
}
有关更多详细信息,请参见TestNG - 5.8 - Factories。
关于selenium - 具有@Before testng的dataProvider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35893294/