2016-10-10 21 views
0

私は、SpecflowとSpecRunを使用してSauce Labsに対していくつかのテストを実行する既存のプロジェクトを持っています。私はBeforeSenarioフックを持ってRemoteWebDriverとこれを閉じるフックAfterScenarioフックを作成します。Specflow/Seleniumで複数のテストを実行する際のエラー

私は今、次のエラーを取得後、(単に名前空間を変更したファイルをコピーされ、)と最初のテストはうまく動作しますが、別のプロジェクトにこれを移動しました:

An exception of type 'OpenQA.Selenium.WebDriverException' occurred in WebDriver.dll but was not handled in user code

Additional information: Unexpected error. The command you just sent (POST element) has no session ID.

This is generally caused by testing frameworks trying to run commands after the conclusion of a test.

For example, you may be trying to capture a screenshot or retrieve server logs after selenium.stop() or driver.quit() was called in a tearDown method. Please make sure this process happens before the session is ended.

私はプロジェクトを比較しました同じバージョンのSpecFlow、同じ.Netバージョンを使用しています。私は2つのプロジェクトの間に違いは見られません。私の手順で

は、私は次の行を持っている:私は問題はとして代わりに、それは今となっている前回のテストのバージョンを使用していますScenarioContextからの新しいインスタンスを取得すると思い

public static IWebDriver driver = (IWebDriver)ScenarioContext.Current["driver"];

配置される。

しかし、なぜこれが別のプロジェクトで動作しているのかわかりません。

私はGitHubのhereでSpecflowの例を使用しています

UPDATE

私は問題を発見したように見えます。 Default.srprofileではtestThreadCountは1でしたが、作業用のソリューションの値は10でした。これを一致させるように更新しました。

この値が何であるべきかわかりません。私はそれが同じ数のテストではないはずだと思いますが、共有ドライバーコンテキストの私の最初の問題をどうやって解決しますか?

答えて

1

TestThreadCountは、SpecFlow + Runner(SpecRun)がテストを実行するために使用するスレッドの数を指定します。 各スレッドは分離されています。デフォルトはAppDomain分離であるため、すべてのスレッドは個別のAppDomainで実行されます。

SauceLabの例では、7つのシナリオがあり、ランナーは10個のスレッドを使用するように構成されています。つまり、すべてのシナリオは、独自のAppDomainを持つ別のスレッドで実行されます。どのスレッドも2番目のシナリオを実行しないため、この例ではこのエラーは発生しません。

スレッドが1つだけの場合、スレッドは複数のシナリオを実行しており、この問題が発生します。

フィールドからスタティックを削除すると、最も簡単に修正されます。すべてのシナリオで、バインディングクラスの新しいインスタンスを取得します。静的なことを覚える必要はありません。 SpecFlow & SpecFlow +とセレンを使用する方法より良い例えば

はこちらをご覧持っている:https://github.com/techtalk/SpecFlow.Plus.Examples/tree/master/SeleniumWebTest

をあなたはRemoteWebDriver上SauceLabsを使用するためのWebDriver-クラスを調整する必要があります。

+0

このリンクをお寄せいただきありがとうございます。これは、複数のブラウザに対してSpecflowテストを行う方法に関する私の他の問題を解決しました。 Sauce Labsでは、2つの同時テストを行うことができます。つまり、testThreadCountを2に設定する必要がありますか?静的フィールドについて私は何をすべきですか? – ADringer

+0

はい、2に設定し、単にフィールドから静的を削除します。 –

関連する問題