如果在c#中显示必填字段错误消息,如何使测试失败?

时间:2014-08-12 23:59:37

标签: c# unit-testing selenium-webdriver

我是测试环境的新手。有一个基本的形式,如名称,地址等。当我点击保存按钮并显示所需的字段错误消息时如何使测试失败?我能够使用XPath找到错误消息。这是我尝试过的代码但是反过来了。我试过的代码在显示错误消息时通过了测试。如果显示错误消息,请告知如何使测试失败。

 try
        {
            //Clear the value of first name
            IWebElement firstname = driver.FindElement(By.Id("FirstName"));
            firstname.Clear();

            //Click on save button
            IWebElement save_profile = driver.FindElement(By.XPath("//div[@class='form-group buttons']/div/input"));
            save_profile.Click();

            //Locate Error Message and Compare the text wit the displayed error message.
            IWebElement FirstNameError = driver.FindElement(By.XPath("//form[@class='default form-horizontal']/fieldset/div[4]/div[2]/span/div"));
            Assert.AreEqual("Please, enter 'First Name'.", FirstNameError.Text);
        }

        catch
        {
            //Fails the test if error message is not displayed
            Assert.Fail();
        }

如果找到元素,有没有办法让测试失败?提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果元素不存在:

Assert.IsNull(FirstNameError);

如果元素存在,但不包含错误消息:

Assert.IsTrue(String.IsNullOrEmpty(FirstNameError.Text));

因为XPath是如此具体,所以这些解决方案有点脆弱,如果你的布局略有变化,你将不得不调整你的XPath表达式。

为适应这种情况,您可以略微调整逻辑,例如:

IWebElement FirstNameError = driver.FindElement(
    By.XPath("//form[@class='default form-horizontal']/fieldset//div[contains(text(), \"Please, enter 'First Name'.\")]"));

Assert.IsNull(FirstNameError);

所以,这里我们基本上说如果指定表单的字段集中的任何地方,测试将失败,那么div元素包含文本“请输入'名字'。”

在这样做时,你显然会引入一种新形式的脆弱性。如果您的错误消息发生更改,则您的测试将不再有效。解决这个问题的方法是定义一些在UI和测试用例中使用的共享常量/消息。