我有一项任务是收集网站的所有链接,转到并查看每个页面,没有错误。问题是如果任何页面上出现错误,测试将终止。我想检查所有页面,并在测试结束时获得所有页面的结果。
public static void OpenAllLinksAndCheckOnErrors()
{
var collectionReportsLinks = CollectionReportsLinks();
foreach (string linkToReportPage in collectionReportsLinks)
{
Driver.Instance.Navigate().GoToUrl(linkToReportPage);
Assert.That(string.IsNullOrWhiteSpace(FindErrorsInReportPages()), "Error on page {0}", FindErrorsInReportPages()));
}
}
public static List<string> CollectionReportsLinks()
{
List<string> links = new List<string>();
var collectionReportsItems = Driver.Instance.FindElements(By.TagName("a")).ToList();
for (int i = 0; i <= collectionReportsItems.Count - 1; i++)
{
var menuItemHref = collectionReportsItems[i].GetAttribute("href".ToString());
links.Add(menuItemHref);
}
return links;
}
public static string FindErrorsInReportPages()
{
string errorText = string.Empty;
var reportItem = Driver.Instance.FindElements(Selectors.AnyPage.GetReportPageError()).FirstOrDefault();
if (reportItem == null)
return errorText;
if (reportItem.Displayed)
errorText = reportItem.Text;
return errorText;
}
答案 0 :(得分:0)
不要在第一时间做断言;而是创建另一个集合/列表并在控制台上记录每个错误,并且为了测试,如果发生任何错误,最后会在测试结束时失败。
private static List<string> _errorList;
public static void OpenAllLinksAndCheckOnErrors()
{
_errorList = new List<string>();
var collectionReportsLinks = CollectionReportsLinks();
foreach (string linkToReportPage in collectionReportsLinks)
{
Driver.Instance.Navigate().GoToUrl(linkToReportPage);
_errorList.AddRange(new[]{FindErrorsInReportPages()});
//add a console message if you want
//Assert.That(string.IsNullOrWhiteSpace(FindErrorsInReportPages()), "Error on page {0}", FindErrorsInReportPages()));
}
//Just failed the test if error occurs.
foreach(string error in _errorList)
{
if (string.IsNullOrWhiteSpace(error))
{
Assert.Fail("Failure message");
}
}
}
答案 1 :(得分:0)
您可以检查所有页面是否有错误,并在列表中收集结果,然后断言错误列表包含所有空条目。你也应该在失败时得到一个体面的信息。
public static void OpenAllLinksAndCheckOnErrors()
{ var errorsList as new List<string>
var collectionReportsLinks = CollectionReportsLinks();
foreach (string linkToReportPage in collectionReportsLinks)
{
Driver.Instance.Navigate().GoToUrl(linkToReportPage);
errorsList.Add(FindErrorsInReportPages())
}
Assert.That(errorsList, Is.All.Null)
}
如果您对列表和集合声明感到不舒服,可以使用stringbuilder ......