2016-08-24 4 views
2

SpecflowとSelenium WebDriverを使用して実行される一連のUIテストがあります。一晩これらが突然動作を停止し、現在は各シナリオで次のエラーをスロー:Specflow Context IWebDriverの注入が失敗する


BoDi.ObjectContainerException:インターフェイスを解決することはできません。OpenQA.Selenium.IWebDriver(解像度パス:ステップクラス

私たちは、その後、私たちのステップの各クラスで使用する各シナリオ、前に、当社のwebdriverを登録上のSpecflowコンテキストインジェクションを使用している:

[Binding] 
public class Base 
{ 
    private readonly IObjectContainer _objectContainer; 
    private IWebDriver _webDriver; 

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

    [BeforeScenario] 
    public void Setup() 
    { 
     _webDriver = new ChromeDriver(); 
     _objectContainer.RegisterInstanceAs<IWebDriver>(_webDriver); 
    } 

    .... 
} 

手順ファイル:私は間違って何も見ることができないSpecflowのドキュメントでオンラインで見る

[Binding] 
public class ProductSteps : TechTalk.SpecFlow.Steps 
{ 
    private readonly IWebDriver _driver; 

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

- と私も今まで、この問題を持つ他の誰を表示少しを見つけることができます!

私はこれの底に到達しようとかなりの時間を費やしましたが、運がまったくありませんでした。

私たちはテストランナーとしてNUnitを使用しており、ナゲット経由で最新のアップデートを受けています。

答えて

3

ProductStepsクラスに別のBeforeScenarioフックがあり、以前に実行されていたBeforeScenatioが他のBeforeScenatioより前に強制的に作成されるため、Webドライバがまだ登録されていないようです。

フックの実行順序を制御できます(http://www.specflow.org/documentation/Hooks/を参照)[BeforeScenario(Order = 0)]の属性のOrderパラメータを使用できます。

http://gasparnagy.com/2016/08/specflow-tips-customizing-dependency-injection-with-autofac/で私の投稿を確認することもできます。これは、Autofacを使用してより複雑な依存関係を持つより堅牢なソリューションを提供します。

+0

こんにちはGaspar、これらのリンクのために多くのありがとう。残念ながら私たちはどこにも設定されていない別のBeforeScenarioフックを持っていませんが、フックの順番を見て、これが役立つかどうかを確かめます。 2つ目のリンクも興味深いように見えます。私たちを助けてくれるいくつかの変更を適用することができますか? –

+0

この場合、バグである可能性があります(このパターンは使用していますが、このようなエラーは見られませんでしたが)。どのSpecFlowバージョンがこれを生成しますか?小規模の再編集を作成することが可能な場合は、ギブスに投稿してください。(Autofacの解決策はまだそれを修正することができます。) –

1

夜間は物事が止まらないだけではありません。

私は昨日と今日の間に何が変わったかを見ていきます。使用しているパッケージを更新しましたか? IOCに関連する変更はありますか?エラーメッセージがその方向を指しています。

まだ動作していたときに元に戻し、問題の原因を特定するために1つずつ変更してください。それからそこから取ることができます。

+0

私たちは最近、このソリューションで少ししか変更していません。UIテストなどのボタンIDなどの簡単な変更のみです。奇妙なことは、時々、参照の削除と再追加、エラーは消えてしまいますが、ソリューションを閉じて再度開くと再び表示されます。 specflow、selenium、webdriver、nunitをいくつかのバージョンに戻してみましょう。これらのパッケージはすべて、nugetの公式パッケージですが、Specflowドキュメントごとにインストールされています。ありがとう –

関連する問題