我正在使用SauceLab和Jenkins的一个TestNG脚本。我遇到了一个问题。当我从Jenkins运行我的项目时,我会从那里选择浏览器,所以我可以将它与“dataProvider”一起使用,但dataProvider只能使用@Test注释,我想在@before中使用dataProvider。
步骤:
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);
}
}
答案 0 :(得分:1)
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
无法通过TestNG的本地依赖注入访问参数列表,如@BeforeMethod
可以。
然而,@Factory
可用于使用@DataProvider
完成初始的数据驱动设置。 e.g:
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。