使用Selenium,TestNG和Cucumber-JVM时共享WebDriver实例

时间:2014-03-06 12:49:32

标签: java selenium testng cucumber-jvm

我正在尝试将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实例。有谁知道怎么做?

1 个答案:

答案 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