2014-03-06 61 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

相關問題