2015-11-25 101 views
0

我想通過xUnit控制檯運行並行執行一大套硒測試。設置selenium webdriver並行執行

這些已執行並且我看到3個chrome窗口打開,但是第一個發送鍵命令僅執行3次到一個窗口,導致測試失敗。

我已經註冊了我的司機在ObjectContainer的如下每個場景前:

[Binding] 
public class WebDriverSupport 
{ 
    private readonly IObjectContainer _objectContainer; 

    public WebDriverSupport(IObjectContainer objectContainer) 
    { 
     _objectContainer = objectContainer; 
    } 

    [BeforeScenario] 
    public void InitializeWebDriver() 
    { 
     var driver = GetWebDriverFromAppConfig();      
     _objectContainer.RegisterInstanceAs<IWebDriver>(driver); 
    } 

然後叫我specflow步defintions司機爲:

_driver = (IWebDriver)ScenarioContext.Current.GetBindingInstance(typeof(IWebDriver)); 
      ScenarioContext.Current.Add("Driver", _driver); 

不過這已經沒有什麼區別看起來好像我的測試正試圖執行所有命令給一個驅動程序。

任何人都可以告訴我哪裏出了問題?

+0

可能看到'GetWebDriverFromAppConfig();'的內容會很有用,因爲這是您實際創建Web驅動程序實例的地方,大概 –

+0

嗨,這只是一個基於應用程序中的條目返回驅動程序的方法。配置。在這種情況下,它是一個鉻驅動程序。 – user3451887

回答

1

你不應該使用ScenarioContext.Current:我想試試這個:

[Binding] 
public class WebDriverSupport 
{ 
    [BeforeScenario] 
    public void InitializeWebDriver() 
    { 
     var driver = GetWebDriverFromAppConfig();      
     ScenarioContext.Current.Add("Driver",driver); 
    } 
} 

然後在你的腳步在並行執行上下文中。如果通過_objectContainer.RegisterInstanceAs注入驅動程序,你會在你的腳步類的構造函數接收它通過構造函數注入,像這樣:

public MyScenarioSteps(IWebDriver driver) 
{ 
    _driver = driver; 
} 

更多信息:

在我看來,這太可怕了。

0

這可能不是一個答案,但對評論太大。

如果您只是從當前場景中獲取並且不通過DI機制注入,您爲什麼要使用IObjectContainer?只要

_driver = (IWebDriver)ScenarioContext.Current.Get("Driver"); 

GetWebDriverFromAppConfig返回一個新的實例,你應該確定...

相關問題