如何对结果表中的所有数量值求和并将总和与总值进行比较?

时间:2019-03-15 11:55:33

标签: c# selenium selenium-webdriver automated-tests

有一个网页http://sfs.gov.ua 在搜索字段中输入“лист”(乌克兰语)并按“提交”按钮后,我收到一条短信,提示“总共找到5536个结果”,并且显示了在特定章节中找到了多少个匹配项的表格(第一列是《章》,第二列是QUANTITY) screenshot

我的任务是汇总结果表中的所有数量并将其与总值进行比较。我知道,表中的行数是动态的,因为它取决于搜索字符串,所以我不知道会有多少行,我应该以某种方式遍历这些行以检索数量值并总结一下。请解释一下我该怎么做,我是SeleniumWebDriver的新手,我将感谢您提供示例。

2 个答案:

答案 0 :(得分:0)

您可以从文本中获取总计,也可以从使用.search__info css定位器定位的元素获取。如何从文本中提取数字,您可以找到here

要获取“Кіль-сть”,您可以使用.table_search tbody tr td:nth-child(3) CSS选择器,该选择器将从所有行返回第三列元素。

这是简单的代码示例:

// Find search info element and get text
string searchInfo = driver.FindElement(By.CssSelector(".search__info")).Text;

// Extract number from text and convert to integer
int total = Int32.Parse(Regex.Match(searchInfo, @"\d+").Value);    

List<WebElement> rows = driver.FindElements(By.CssSelector("a"));
int rowsTotal = 0;
foreach (IWebElement row in rows)
{
    rowsTotal += Int32.Parse(row.Text);
}

// Assert values here as example
Assert.AreEqual(total, rowsTotal);

答案 1 :(得分:0)

我不确定您要检查什么,因为在您的示例中719 + 1282不等于5536。但是有一个示例如何执行此操作:

String textWithTotalCount = driver.FindElement(By.Class("search__info")).Text;
Int totalCount = Int32.Parse(Regex.Match(textWithTotalCount, @"\d+").Value);

IList<IWebElement> rows = driver.FindElements(By.Xpath("table[@class='table table_search']/tbody/tr"));
IList<int> countList = rows.ConvertAll(x => Int32.Parse(x.findElement(By.Xpath("/td[-1]")).getText())).ToList();

Assert.Equal(totalCount, countList.Count());