我为每个数据集打开浏览器的多个实例,但是所有输入数据仅在一个实例/会话中输入,而不是在每个实例中输入每个数据集。我正在使用硒和TestNG
@DataProvider(name="URLprovider", parallel=true )
private Object[][] getURLs() {
return new Object[][] {
{"Fist data"},
{"Second Data"},
{"3 data"}
};
}
@Test(dataProvider="URLprovider",threadPoolSize = 3)
public void testFun(String url){
BaseDriver baseReference = BaseDriver.getBaseDriverInstance();
System.out.println("Test class"+url +"="
+Thread.currentThread().getId());
driver = baseReference.initBrowser();
driver.get("http://stackoverflow.com/");
driver.findElement(By.xpath("//*@id='search']/div/input")).sendKeys(url);
}
因此,在这里我要并行打开三个浏览器实例(因为我们在@dataprovider中有3组数据)并在文本框中输入值。但是在执行代码3时,实例打开了,但是仅在一个实例中输入了测试数据值...但是我期望在一个实例中输入一个数据。
答案 0 :(得分:0)
问题出在您的测试代码上。
您在testFun()
中共享的测试代码似乎表明您在所有WebDriver
迭代中都使用相同的@Test
实例。
您尚未向我们展示BaseDriver baseReference = BaseDriver.getBaseDriverInstance();
的外观,但是按照您的问题,我假设它返回的是相同的webdriver实例。
这说明了为什么所有测试方法似乎都共享同一webdriver实例。
要解决此问题,您需要执行以下一项操作:
testFun()
(或)”内部移动您的webdriver实例化逻辑@BeforeMethod
配置方法,该方法将负责创建浏览器实例并将其持久保存在ThreadLocal<RemoteWebDriver>
实例和测试方法中,即testFun()
获取当前线程的webdriver实例通过driver.get()
[这里驱动程序的类型为ThreadLocal<RemoteWebDriver>
。不要忘记将driver
声明为静态变量。