これを行う「最善の」方法はありませんが、私がこれを達成した方法は次のとおりです。
列挙型を作成しました:
/// <summary>
/// Enum that holds references to different browsers used in testing.
/// </summary>
public enum BrowserTypeEnum
{
/// <summary>
/// Google Chrome.
/// </summary>
Chrome,
/// <summary>
/// Mozilla Firefox.
/// </summary>
Firefox,
/// <summary>
/// Internet Explorer.
/// </summary>
InternetExplorer
}
次のように TestFixture で呼び出します。
/// <summary>
/// Tests related to browsing Google
/// </summary>
[TestFixture(BrowserTypeEnum.Chrome)]
[TestFixture(BrowserTypeEnum.Firefox)]
public class GoogleTests : AbstractTestFixture
{
}
AbstractTestFixture では:
/// <summary>
/// Create's the browser used for this test fixture.
/// <para>
/// Must always be called as part of the test fixture set up.
/// </para>
/// <para>
/// It is the actual test fixture's responsibility to launch the browser. (Usually in the test fixture setup)
/// </para>
/// </summary>
protected override void CreateBrowser()
{
switch (BrowserType)
{
case BrowserTypeEnum.Chrome:
Browser = new ChromeDriver();
break;
case BrowserTypeEnum.Firefox:
Browser = new FirefoxDriver();
break;
case BrowserTypeEnum.InternetExplorer:
Browser = new IEDriver();
break;
default:
break;
}
}
最善の解決策ではないかもしれませんが、かなり読みやすいことがわかりました。別の方法は、Selenium Grid などを使用するか、ドライバーのタイプを NUnit に渡して直接作成することです。あなたはすでにこれを試しました(直接タイプのドライバーを渡します)が、あなたが求めているものではないようです。唯一の違いは、実際のテストではなく、ドライバーのタイプをテスト フィクスチャに渡すことです。
もう 1 つの方法は、CI サーバー ソリューションを使用する場合、構成設定を作成して、テストに使用するブラウザーを示すことです。CI ドライバーにテストを 3 回繰り返させ、そのたびにその構成設定を編集します。
私は同意します。彼らがどのような種類のドライバーを使用しているかを知ることは、実際のテストの責任ではありません。これが、私がその責任をテスト フィクスチャに押し上げた理由です。私がやっている方法は、最も「エレガントな」方法ではないかもしれませんが、少なくとも私にとっては最も読みやすい方法です。私のコードを見ている人は、このテスト フィクスチャが繰り返されていること、およびどのブラウザーがその手順を繰り返しているかを簡単に確認できます。
私にとっては、ドライバーの作成は常に実際の TestFixture (ベース テスト フィクスチャではなく) で行う必要があります。その理由は、ブラウザーを開く前に実行したいロジックが少しあるためです。このロジックが (Setup または TestFixtureSetup メソッドで) 失敗した場合、NUnit はティアダウン メソッドを実行しません。そのため、ブラウザ ウィンドウは開いたままになります。
これを改善するために、テストが実行される前に TestFixtureSetup で行う最後の処理は、"CreateBrowser" と呼ばれます。