2

リンクが存在するかどうかを確認するために、Selenium WebDriver を使用して C# 単体テストを行っています。コードは次のとおりです。

   [TestMethod()]
    public void RegisterLinkExistTest()
    {
        IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
        Assert.AreEqual("Register here", registerLink.Text, "Failed");
    }

PartialLinkText を「Register」ではなく「Register1」に設定するとどうなるかを確認したかったのです。MSTest は、Selenium からスローされた例外により、このテストに失敗しました。Assert.AreEqual を実行したかったのですが、MSTest は前の行で例外をスローします。ExpectedException 属性を使用して「OpenQA.Selenium.NoSuchElementException」を指定できることはわかっていますが、その例外を予期していないため、そのようにしたくありません。これを処理するにはどうすればよいですか?

4

1 に答える 1

1

@ AD.Netがすでに述べたように、テストは期待どおりに機能しています。

リンクが見つからなかった場合は例外をキャッチできますが、それを行う意味がわかりません。リンクが見つからない場合は、registerLinkになりますnull。nullオブジェクトのプロパティをアサートするポイントは何ですか?

テストは正常に機能しAssertます。行を削除するだけです。

ただし、リンクのテキストもテストする場合は、次のコードを試してください。

[TestMethod()]
public void RegisterLinkExistTest()
{
    try
    {
        IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
        Assert.AreEqual("Register here", registerLink.Text, "Register's link text mismatch");
    }
    catch(NoSuchElementException)
    {
        Assert.Fail("The register link was not found");
    }
}

編集

テストを分離することができます。最初のテストはリンクが存在するかどうかをチェックし、2番目のテストはそのプロパティをアサートします。

[TestMethod()]
public void RegisterLinkExistTest()
{
    IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
}

[TestMethod()]
public void RegisterLinkTextTest()
{
    IWebElement registerLink = genericBrowserDriver.FindElement(By.PartialLinkText ("Register1"));
    Assert.AreEqual("Register here", registerLink.Text, "Register's link text mismatch");
}

次に、OrderedTestを使用し、それらをその順序で追加して、RegisterLinkExistTestが最初に実行されるようにします。失敗した場合、2番目のテストは実行されません。

于 2012-10-12T07:41:15.673 に答える