使用Selenium C#验证webtable中的多个范围

时间:2017-11-10 15:57:38

标签: c# selenium selenium-webdriver

我有一个Web表来验证值:

ID日期%月
1 30-10-2017 75 JAN
2 18-10-2017 80 FEB
3 2017年1月11日 60 MAR
4 22-10-2017 67 APR

我想验证
1.日期值在'15 -10-2107'到'15 -11-2017'的范围内 2.%范围在50-90之间 3. 1月至5月的月份范围 我正在使用Selenium C#进行验证。什么是最好的方法?

2 个答案:

答案 0 :(得分:1)

要测试日期是否在指定范围内,您可以构造一个DateTime对象并断言它在2组DateTime范围内:

var start = DateTime.ParseExact("15-10-2017", "dd-mm-yyyy", System.Globalization.CultureInfo.InvariantCulture);
var end = DateTime.ParseExact("15-11-2017", "dd-mm-yyyy", System.Globalization.CultureInfo.InvariantCulture);
var dateFromtable = DateTime.ParseExact([DATE_FROM_TABLE], "dd-mm-yyyy", System.Globalization.CultureInfo.InvariantCulture);

Assert.That(dateFromtable  >= start && dateFromtable < end, Is.True);

测试你的%一个简单的int cast并检查类似于上面的日期断言。

您的月份检查可以通过多种不同方式完成,我认为最简单最直接的方法是构建一个包含可接受月份的列表

var acceptableMonths = new[] {"Jan", "Feb", "Mar", "Apr", "May"}; //Assuming may is included in the list
Assert.That(acceptableMonths.Contains([MONTH_READ_FROM_TABLE]), Is.True)

答案 1 :(得分:1)

  1. 首先使用xpath缩小数据集(这样就不需要循环所有表格行)

    string xpath = '//table//td[3][number(text())>=50 and number(text())<=90]';
    first_filter_rows = driver.FindElements(By.xpath(xpath));
    
  2. 使用月份范围对first_filter_rows进行第2次过滤

    Regex reg = new Regex("Jan|Feb|Mar|Apr|May");
    ArrayList second_filter_rows = new ArrayLis();
    foreach(row in first_filter_rows) {
    string month = row.FindElement(By.xpaht('./td[4]')).text;
    if(reg.IsMatch(month)) {
     second_filter_rows.add(row);
    }
    }
    
  3. 使用日期范围在second_filter_rows上执行第3个过滤器

    var start = DateTime.ParseExact("15-10-2017", "dd-mm-yyyy",
           System.Globalization.CultureInfo.InvariantCulture);`
    
        var end = DateTime.ParseExact("15-11-2017", "dd-mm-yyyy", 
           System.Globalization.CultureInfo.InvariantCulture);
    
        ArrayList third_filter_rows = new ArrayLis();
    
        foreach(row in second_filter_rows) {
          string date = row.FindElement(By.xpaht('./td[2]')).text;
          var dateFromtable = DateTime.ParseExact(date, "dd-mm-yyyy", 
        System.Globalization.CultureInfo.InvariantCulture);
        if(dateFromtable >= start && dateFromtable < end) {
            third_filter_rows.add(row);
            // output to your report
        }
        }
    
        Assert(third_filter_rows.length > 0, IsTrue);