2

我有一个使用 Selenium WebDriver 的 C# 单元测试来测试是否存在链接。这是代码:

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

我想看看如果我将 PartialLinkText 设置为“Register1”而不是“Register”会发生什么。MSTest 未能通过 Selenium 引发的异常而导致此测试。我希望 Assert.AreEqual 执行,但 MSTest 在上一行抛出异常。我知道我可以使用 ExpectedException 属性来指定“OpenQA.Selenium.NoSuchElementException”,但我不想这样做,因为我不希望出现这种异常。我该如何处理这个?

4

1 回答 1

1

正如@AD.Net 已经说过的,您的测试按预期工作。

如果找不到链接,您可以捕获异常,但我不明白这样做的意义。如果未找到链接,registerLink则将为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");
    }
}

编辑

您可以分开您的测试,第一个测试将检查链接是否存在,第二个将断言它的属性。

[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首先执行。如果失败,则第二个测试将不会运行。

于 2012-10-12T07:41:15.673 回答