我可以想到两种方法来做到这一点。
一 - 对于每个 web 元素,您可以检查其大小、位置、可见性等。每次调整大小后,您可以将这些参数与一些先前指定的值进行比较,以检查布局是否已更改。
第二 - 图像比较。每次调整大小后,您可以截取页面并将其与之前保存的模式进行比较。有各种图像比较库可以实现这一点。在我们公司,我们使用ImageMagick。然而,图像比较不适用于正在开发的页面,也不适合内容不断变化的页面。您可以通过隐藏页面中易于使用 javascript 更改的部分来解决此问题(这可以通过 WebDriver 实现)。
我必须承认我从来没有机会手动或自动测试响应页面,所以以上只是我的想法。我确实使用图像比较来测试“正常”页面,我不确定它是否也适用于响应式页面。
编辑
不幸的是我不知道Ruby。下面是一个 Java 示例,希望您能理解它并以某种方式翻译成 Ruby。该代码仅打印列表中每个元素的大小和位置。
org.openqa.selenium.Point point;
org.openqa.selenium.Dimension dimension;
List<WebElement> elementsList = driver.findElements(By.xpath("//some/xpath"));
for (WebElement element : elementsList)
{
point = element.getLocation();
dimension = element.getSize();
System.out.println("Element name: " + element.getTagName());
System.out.println("Element size: " + dimension.height + "x" + dimension.width);
System.out.println("Element location: " + point.x + ":" + point.y);
}
请注意,每次调用 getLocation() 和 getSize() 都会导致 js 被执行(为了获取值)并且它会花费时间。这就是为什么你应该每个元素只调用一次,不要使用 element.getSize().height + "x" + element.getSize().width - 与上面的示例相比,它需要两倍的时间。
在 Ruby 中,上述方法称为 element.location 和 element.size