我是测试环境的新手。有一个基本的形式,如名称,地址等。当我点击保存按钮并显示所需的字段错误消息时如何使测试失败?我能够使用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();
}
如果找到元素,有没有办法让测试失败?提前谢谢。
答案 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和测试用例中使用的共享常量/消息。