我想检查页面上是否存在多个元素,如果不存在,我想查看一个自定义错误消息列表,告诉我哪些元素不存在。
目前我有:
测试用例:
[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;
}
这将起作用,但是,如果其中任何一个失败,测试将失败。我需要一种方法来继续运行测试,然后在测试结束时吐出任何错误,例如:"找不到第一个元素","找不到第三个元素"等
感谢。
答案 0 :(得分:0)
您可以做的是修改方法以返回错误字符串:
[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
和def send_invoice_email(self, booking, user, bookingitems):
customer_email = self.get_user_current_email()
subject ="invoice"
ctx = {
'hoardings': bookingitems
}
send_invoice.delay(customer_email, subject, ctx)
属性的类。
答案 1 :(得分:0)
创建一个新类,其中包含满足您需求的方法
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”时,您只需调用重载方法即可。您可以按照上面的示例执行任何操作,并根据需要更改代码/方法。
您还可以修改Results类以执行以下操作
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();