使用 webdriver 测试页面布局

软件测试 自动化测试 硒网络驱动程序 硒2 浏览器自动化
2022-01-09 21:54:57

有没有人尝试使用 webdriver 测试网站的页面布局?具体来说,使用webelement.getPosition() 和 webelement.getDimension()

这两种方法不应该足以测试页面的布局吗?我做了一个快速测试,发现该位置将返回元素相对于页面左上角的位置。这意味着无论监视器分辨率或窗口大小如何,它都应该始终返回相同的值。

如果我可以一次记录位置和元素尺寸并将这些值存储在某处,我可以使用 selenium 运行自动化测试来查找元素的位置或尺寸是否发生了变化。如果该更改大于我设置的增量值,则意味着元素的对齐方式已更改,我可能无法通过测试。

我打算创建一些执行此操作的实用程序,但想确认这确实足以测试页面布局

4个回答

作为简单地确保值每次都完全匹配的替代方法,您可以通过检查某些元素不相交或元素 A 始终高于元素 B 等内容来创建更可靠的自动化。这需要创建一些额外的功能来测试这些东西。这将为您提供一些布局的自动验证,而不会如此脆弱和跨浏览器工作,但我仍然认为它不会取代页面的视觉验证。

我不会推荐这种方法。首先,它相当缓慢。您是否尝试过为页面上的每个元素调用您提到的方法?在 Chrome 或 FF 等浏览器中,190 个元素大约需要 6-10 秒(实际上我今天检查过)。此外,在 IE 上可能需要超过 1 分钟!

另一件事是管理这些存储的值。如果您想手动定义要检查这些值的每个元素 - 这将是一项繁重的工作,而且它很容易受到对页面所做的任何更改的影响。因此,我假设您自动获取并保存所有元素的值。但是我不确定 findElements 函数是否总是以相同的顺序返回元素。你需要检查一下。

我宁愿建议使用网络驱动程序截屏。您可以截取屏幕截图并将其保存为参考图案。然后在下一次测试期间,您拍摄另一个屏幕截图并将其与保存的模式进行比较。在我们公司,我们使用ImageMagick,我们对此很满意。它是开源解决方案。我们只需从我们的 java 程序中运行可执行文件(compare.exe,包含在包中)。还有其他图书馆。它并没有消除我上面提到的问题(仍然很容易受到任何更改的影响),但它更容易实现并提供更多的覆盖范围。

但是,如果您描述的方法足以进行布局测试,请回到您的问题。基本上是的,如果:

  • 你不关心图像、字体系列、字体颜色等。
  • 您可以确保每次测试时都使用相同的浏览器大小(但这很容易)
  • 页面上没有使用 javascript 放置/调整大小/移动的任何元素

一般来说,页面布局和浏览器兼容性最好通过手动测试进行测试。
Selenium 旨在测试您网站的功能。您关于使用webelement.getPosition()webelement.getDimension()方法测试布局的建议不太可能奏效,因为在大多数 HTML 页面中,简单地调整网页大小将移动页面上的大多数元素。

相反,我建议在每次发布之前目视检查您网站的每个页面。如果您必须支持多个 Web 浏览器,这涉及在多个 Web 浏览器中进行手动测试。

如果这是针对 Java [和 Selenium 2] 那么为什么不使用Fighting Layout Bugs项目呢?

添加依赖项,您可以创建如下测试:

FirefoxDriver driver = new FirefoxDriver();
try {
    String testPageUrl = "http://www.test.de/";
    driver.get(testPageUrl);
    WebPage webPage = new WebPage(driver);
    FightingLayoutBugs flb = new FightingLayoutBugs();
    final Collection<LayoutBug> layoutBugs = flb.findLayoutBugsIn(webPage); 
    System.out.println("Found " + layoutBugs.size() + " layout bug(s).");
    for (LayoutBug bug : layoutBugs) { System.out.println(bug); }
}
catch (Exception e) {
    e.printStackTrace();
}
finally {
    driver.quit();
}