【发布时间】:2016-11-22 17:15:03
【问题描述】:
我正在尝试在本地并行运行我的 selenium 测试,通过在线阅读我知道我可以使用 TestNG 来做到这一点。 我有以下示例代码,它允许我并行运行 2 个测试。
testng.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Parallel" thread-count="2" parallel="methods" >
<test name="testing">
<classes>
<class name="Sessions"/>
</classes>
</test>
</suite>
Sessions.class
@Test
public void testSessionOne() throws IOException {
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.co.uk");
driver.findElement(By.name("q")).sendKeys("one");
}
@Test
public void testSessionTwo() throws IOException {
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.co.uk");
driver.findElement(By.name("q")).sendKeys("two");
}
这很好用,但是我想使用 PageObjectModel 框架。我稍微改变了测试,所以现在看起来像这样。 (我保留了相同的 testng.xml)。
Sessions.class
public void testSession1() throws IOException{
WebDriver driver = getDriver();
open(driver, url);
enterTextInSearchField(driver, "one");
}
MyMethods.class
public WebDriver getDriver(){
return new ChromeDriver();
}
public void open(WebDriver driver, String url) {
driver.get(url);
}
public void enterTextInSearchField(WebDriver driver, String search) {
driver.findElement(By.name("q")).sendKeys(search);
}
我现在遇到的问题是我需要始终将“驱动程序”作为所有方法的参数传递。如果我不这样做,测试会变得混乱并尝试在同一个浏览器上运行所有内容。 有没有更好的方法可以做到这一点,这样我仍然可以并行运行,而不必将驱动程序作为参数传递?
【问题讨论】: