我正在尝试将Cucumber-JVM添加到我正在研究的TestNG和Selenium项目中,我目前通过类似这样的测试套件在网格上重新使用浏览器:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Grid" thread-count="2" parallel="tests">
<test name="Firefox 27.0">
<parameter name="browser" value="Firefox"/>
<parameter name="browser_version" value="27.0"/>
<packages>
<package name="[Test package name]"/>
</packages>
</test>
<test name="IE 11">
<parameter name="browser" value="IE"/>
<parameter name="browser_version" value="11.0"/>
<packages>
<package name="[Test package name]"/>
</packages>
</test>
</suite>
然后包中的每个测试类都接受基类中setUp方法中的参数,如下所示:
@BeforeClass
@Parameters({"browser", "browser_version"})
public void setUp(String browser, String browser_version) throws MalformedURLException {
// Do the setup with WebDriver and assign to an object property
}
但是,我希望在所有测试类之间共享一个静态或注入类,以避免每次重新初始化浏览器,这也应该让我在各个步骤定义文件之间共享WebDriver实例。有谁知道怎么做?
答案 0 :(得分:1)
您可以使用Pico Container,它与Cucumber-JVM一起打包。
然后在测试类的构造函数中,您可以请求驱动程序:
public class TestClass {
WebDriver driver;
public TestClass(WebDriver driver) {
this.driver = driver;
}
}
PicoContainer会自动将webdriver的一个实例传递给该类,任何其他具有类似构造函数的类也将获得相同的实例。
链接到文档:http://picocontainer.codehaus.org/constructor-injection.html