Selenium C# - 检查表中是否有值

时间:2017-07-21 19:45:47

标签: c# selenium

在我的一个测试用例中,如果基于某些配置,则不应显示表上的确定值。

如果未显示预测的值,我已制作了显示消息的代码,如下所示:

public void AssertRecord(string recordExpected)
{
    try
    {
        Assert.AreEqual(recordExpected, RecordGridCell.GetGridCellAtPosition1BasedOnAnyValue(recordExpected));
    }
    catch (Exception)
    {
        Console.WriteLine(recordExpected + " not found.");
    }
}

顺便说一下, GetGridCellAtPosition1BasedOnAnyValue 上面的函数在这里:

public static string GetGridCellAtPosition1BasedOnAnyValue(this IWebElement table, string value)
{
    UtilFunctions.WaitForLoadingBar();
    IList<IWebElement> tableRow = table.FindElements(By.XPath(".//tr//td[text()='" + value + "']//ancestor::tr//td[1]"));
    return tableRow.First().GetAttribute("innerHTML");
}

所以,根据我今天得到的代码,我得到一个输出,例如,“找不到巧克力棒”。如果该值存在,则不会抛出任何内容。

我的问题是:如果表格中有任何不应存在且无法预测的值,则不会报告。

如果桌子上的任何值不应该存在,我需要帮助才能找到报告方式。

1 个答案:

答案 0 :(得分:1)

由于您有一个预先定义的表中预期记录的列表,我将使用该列表并通过Enumerable.Except对照表中的实际记录列表进行检查。

这里有一些代码可以给你一个想法:

using System.Collections.Generic;
using System.Linq;

var expectedRecords = new List<string> { "A", "B", "C", "D" };
var actualRecords   = new List<string> { "A", "C", "E" };

//var actualRecords = table.FindElements(".//tr//td[1]")
//                         .Select(e => e.GetAttribute("innerHTML"))
//                         .ToList();

var notFoundRecords = expectedRecords.Except(actualRecords); // [ "B", "D" ]
var invalidRecords  = actualRecords.Except(expectedRecords); // [ "E" ]

这将为您提供实际列表中不存在但应该是(notFoundRecords)的内容以及实际列表中的内容但不应该是({{1} })。