【问题标题】:Sharing a WebDriver instance when using Selenium, TestNG, and Cucumber-JVM使用 Selenium、TestNG 和 Cucumber-JVM 时共享 WebDriver 实例
【发布时间】:2014-03-06 12:49:32
【问题描述】:

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

【问题讨论】:

    标签: java selenium testng cucumber-jvm


    【解决方案1】:

    您可以使用与 Cucumber-JVM 打包的 Pico Container。

    然后在您的测试类的构造函数中,您可以请求驱动程序:

    public class TestClass {
    
        WebDriver driver;
    
        public TestClass(WebDriver driver) {
            this.driver = driver;
        }
    }
    

    PicoContainer 会自动将 webdriver 的实例传递给该类,任何其他具有类似构造函数的类也将获得相同的实例。

    文档链接:http://picocontainer.codehaus.org/constructor-injection.html

    【讨论】:

    • 我可以使用它从 TestNG 套件文件中传递变体配置选项吗?
    • 不确定。您能否将 WebDriver 包装在您自己的类中,这样可以检索 TestNG 配置。然后使用 PicoContainer 提供的构造函数注入将该类传递到您的测试中?
    • 能否从testng.xml的参数标签中读取浏览器和浏览器版本值,并在黄瓜的stepdefs中使用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多