2014-03-06 60 views
2

我想将Cucumber-JVM添加到我一直在使用的TestNG和Selenium项目中,在那里我通过一个网格重新使用浏览器测试套件是这样的:在使用Selenium,TestNG和Cucumber-JVM时共享一个WebDriver实例

<?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> 

包中的每个测试类则接受参数的设置方法的基类,它看起来是这样的:

@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

您可以使用与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

+0

我可以用这个从TestNG的套件文件的变化配置选项传递? –

+0

不确定。你可以将WebDriver包装在自己的类中,它可以检索TestNG配置。然后使用PicoContainer提供的构造函数注入将该类传递到您的测试中? –

+0

您是否可以从testng.xml的参数标记中读取浏览器和浏览器版本值,并在黄瓜的stepdefs中使用它? – Vikas

相关问题