我应该如何测试为网页生成的HTML?

时间:2015-10-08 15:51:18

标签: html unit-testing selenium html-table

我在页面上有一些HTML,它有一堆表和数据(它是一个报告页面)。这是所有遗留代码,因此不需要对表的使用进行骚扰。

鉴于它是遗留代码,它很脆弱,我们想确认表格看起来像我们想要的(列数,行数和它们内部的数据是准确的)。

我的第一个倾向是使用selenium web驱动程序并以这种方式运行(页面对象模式),但是同事建议我只查看页面的来源,复制有问题的表,然后使用它在测试中进行字符串比较。

我对他的提议的初步想法是,这不是一个好的测试,因为你从答案开始然后编写测试以确保你得到答案(基本上是非TDD)。但在这种情况下,我不确定这是一个足够好的答案。

除了每个单元格的内容之外,我应该如何测试HTML表格以确保所有列,行都是我们喜欢的?

2 个答案:

答案 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)

我认为这两种方法都是有效的,这实际上取决于你想要做什么以及哪些优点/缺点最适合你。

  1. 编写一个Selenium脚本来刮取表格并验证某些事情需要一些工作(取决于你或你的队友技能和经验)。
  2. 优点: 一旦完成,它将非常快速地进行验证,并且不如方法#2那么脆弱。

    缺点: 这取决于您编写脚本的速度以及您能够轻松验证要验证的所有内容。如果你想要的只是#cols / rows和cell content,那应该很容易。如果你想验证格式化(大小,颜色等)之类的东西,那么通过代码开始变得有点复杂。

    1. 复制/粘贴HTML并对其进行验证将非常容易。问题是,正如您所指出的那样,您在某些方面开始回答问题。您可以通过验证表的HTML源是否正确来解决这个问题。这必须手动完成,但是一旦你得到它,你就可以打开页面并比较表格的来源和你验证的内容。
    2. 优点: 您将能够判断任何何时发生变化...格式化,数据,#单元格......一切。

      缺点: 您将能够判断任何更改的时间...大声笑。当任何更改时,您的测试将失败,如果您希望表格能够更新,这将使测试非常脆弱。如果它得到更新,您将不得不重新验证表的所有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源的脚本和文本比较之间的中间情况。