如何在循环中收集Assert并在测试结束时获得结果

时间:2015-03-19 14:53:17

标签: c# selenium automated-tests assert

我有一项任务是收集网站的所有链接,转到并查看每个页面,没有错误。问题是如果任何页面上出现错误,测试将终止。我想检查所有页面,并在测试结束时获得所有页面的结果。

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;            
}

2 个答案:

答案 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 ......