我想检查页面中是否存在一些元素,如果没有元素,我希望看到一个自定义错误消息列表,告诉我哪些元素不存在。
现在我有:
测试用例:
[Test]
public void CheckAllElementsArePresent()
{
Assert.IsTrue(Results.CheckFirstElement());
Assert.IsTrue(Results.CheckSecondElement());
Assert.IsTrue(Results.CheckThirdElement());
}
框架:
public static bool CheckFirstElement()
{
var results = Driver.Instance.FindElement(By.CssSelector("firstElementSelector']"));
if (results == null)
{
throw new Exception("Cannot find first element");
}
var attr = results.GetAttribute("id");
if (attr == null)
{
throw new Exception("Cannot find first element");
}
if (attr.Contains("someTextIWantToFind"))
{
return true;
}
return false;
}
但是,如果其中任何一个都失败了,测试就会失败。我需要一种方法来继续运行测试,然后在测试结束时吐出任何错误,例如:“找不到第一个元素”、“找不到第三个元素”等等。
谢谢。
发布于 2017-11-13 10:53:09
创建一个新类,该类将根据您的需要保存方法。
public static class MakeSure
{
private static List<string> errorsFound = new List<string>();
public static List<string> getErrors() { return errorsFound; }
public void ElementIsNotNull(IWebElement element, string elementName)
{
if(element == null)
{
errorsFound.Add("Cannot find element " + elementName +".");
}
}
public void ElementHasAttribute(IWebElement element, string elementName, string attribute)
{
if(element.GetAttribute(attribute) == null)
{
errorsFound.Add("Cannot find " + attribute + " attribute of the element.");
}
}
public void ElementContaisText(IWebElement element, string elementName, string attribute, string text)
{
if(!element.GetAttribute(attribute).Text.Contains(text))
{
errorsFound.Add("Cannot find the text " + text +" in " + elementName +" element");
}
}
}
您可以从测试用例中将它们调用为"MakeSure“--您的元素有一个特定的属性,不是null等等。您可以创建更多的重载,这样您就不必每次都将"ID”放入“属性”,如下所示:
public void ElementHasAttribute(IWebElement element, string elementName)
{
ElementHasAttribute(element, elementName, "id");
}
因此,每次您希望属性是"id“时,只需调用重载方法。您几乎可以按照上面的示例进行任何操作,并将代码/方法更改为您的需要。
还可以修改结果类以执行以下操作
public void CheckFirstElement()
{
IWebElement firstElement;
MakeSure.ElementIsNotNull(firstElement, "first element");
MakeSure.ElementHasAttribute(firstElement, "first element", "id");
MakeSure.ElementContaisText(firstElement, "first element", "id", "Text to validate.");
}
所以在你的测试中你要做的就是:
Results.CheckFirstElement();
发布于 2017-11-07 05:49:44
您可以做的是修改方法以返回错误字符串:
public static string CheckFirstElement()
{
var results = Driver.Instance.FindElement(By.CssSelector("firstElementSelector']"));
if (results == null)
{
return "Cannot find first element";
}
var attr = results.GetAttribute("id");
if (attr == null)
{
return "Cannot find id attribute of first element";
}
if (!attr.Contains("someTextIWantToFind"))
{
return "Cannot find the text in first element";
}
return null;
}
然后收集主测试中发现的任何错误:
[Test]
public void CheckAllElementsArePresent()
{
var errors = new List<string>();
var error = Results.CheckFirstElement();
if(error != null)
errors.Add(error);
error = Results.CheckSecondElement();
if(error != null)
errors.Add(error);
error = Results.CheckThirdElement();
if(error != null)
errors.Add(error);
if(errors.Any())
{
//Output to console
var errorString = string.Join(";", errors);
Console.Writeline(errorString);
//Fail the test
Assert.Fail(errorString);
}
}
这只是一条路。您可以使用boolean
和ErrorMessage
属性返回一个类,如果您想得到更好的效果的话。
https://stackoverflow.com/questions/47159281
复制相似问题