我在页面上有一些HTML,它有一堆表和数据(它是一个报告页面)。这是所有遗留代码,因此不需要对表的使用进行骚扰。
鉴于它是遗留代码,它很脆弱,我们想确认表格看起来像我们想要的(列数,行数和它们内部的数据是准确的)。
我的第一个倾向是使用selenium web驱动程序并以这种方式运行(页面对象模式),但是同事建议我只查看页面的来源,复制有问题的表,然后使用它在测试中进行字符串比较。
我对他的提议的初步想法是,这不是一个好的测试,因为你从答案开始然后编写测试以确保你得到答案(基本上是非TDD)。但在这种情况下,我不确定这是一个足够好的答案。
除了每个单元格的内容之外,我应该如何测试HTML表格以确保所有列,行都是我们喜欢的?
答案 0 :(得分:1)
这取决于。字符串匹配听起来像Approval Testing,这取决于表格的动态程度如何。
如果我已经进行过Selenium测试,我会坚持使用我所拥有的。使用findElements计算和验证各种列,行和值。
Re:您的评论如果您无法说服开发人员添加ID,名称或其他内容以使您的工作更轻松,那么您可以使用Selenium路线,那么xpath可能就是您想要使用的内容。我们已经创建了实用方法来帮助解决这类问题:
public boolean isLabeledTextPresent(String label, String text) {
WebElement element = findElement(By.xpath("//tr/th/label[contains(text(), '" +
label + "')]/ancestor::tr/td"));
String labeledText = element.getText().trim();
return labeledText.contains(text);
}
答案 1 :(得分:0)
我认为这两种方法都是有效的,这实际上取决于你想要做什么以及哪些优点/缺点最适合你。
优点: 一旦完成,它将非常快速地进行验证,并且不如方法#2那么脆弱。
缺点: 这取决于您编写脚本的速度以及您能够轻松验证要验证的所有内容。如果你想要的只是#cols / rows和cell content,那应该很容易。如果你想验证格式化(大小,颜色等)之类的东西,那么通过代码开始变得有点复杂。
优点: 您将能够判断任何何时发生变化...格式化,数据,#单元格......一切。
缺点: 您将能够判断任何更改的时间...大声笑。当任何更改时,您的测试将失败,如果您希望表格能够更新,这将使测试非常脆弱。如果它得到更新,您将不得不重新验证表的所有HTML,这可能会成为一个繁琐的过程,具体取决于您期望这种情况发生的频率。有助于此验证的一件事是使用差异化工具......您可以快速确定已更改的内容并验证,而不是每次更改时都必须验证所有内容。
我倾向于#1,编写脚本。它将不那么脆弱,只要有合适的技能,就不应该做那么大的任务。
修改
您没有指定您正在使用的语言,但是这里有一些Java代码,如果您选择编写脚本,希望能指出正确的方向。
WebElement table = driver.findElement(...));
List<WebElement> rows = table.findElements(By.tagName("tr"));
Assert("Validate expected number of rows", rows.size(), expectedNoOfRows);
for (int row = 0; row < rows.size(); row++)
{
List<WebElement> cells = rows.get(row).findElements(By.tagName("td"));
Assert("Validate expected number of cells in row " + row, cells.size(), expectedNoOfCells[row]);
for (int cell = 0; cell < cells.size(); cell++)
{
Assert("Validate expected text in (" + cell + "," + row + ")", cells.get(cell).getText().trim(), expectedText[cell][row]);
}
}
您可以在基本级别执行此类操作。如果你想获得更多的花哨,你可以添加寻找报告特定部分的逻辑,这样你就可以得到一个“里程碑”,例如摘要,数据,......制作标题......所以你将在下一节中知道会发生什么。
您可以运行此代码的变体来转储不同的值,行数,每行中的单元格数以及单元格内容。验证这些值是否正确后,您可以将其用作主数据并进行比较。这样可以避免在比较直接HTML源时出现错误。也许这是基于HTML源的脚本和文本比较之间的中间情况。