我有一个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#进行验证。什么是最好的方法?
答案 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)
首先使用xpath缩小数据集(这样就不需要循环所有表格行)
string xpath = '//table//td[3][number(text())>=50 and number(text())<=90]';
first_filter_rows = driver.FindElements(By.xpath(xpath));
使用月份范围对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);
}
}
使用日期范围在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);