2012-06-27 84 views
1

我被要求在我们网站的JavaScript部分实施验证测试。我一直在考虑使用硒WebDriver。我们想要测试的一件事是用户界面:检查它是否“看起来很好”(必须对齐的东西是对齐的,框位于正确的位置)。验证测试:如何验证UI?

目前,我发现的唯一选择是使用Selenium拍摄快照,并将其与预先手动拍摄的测试快照进行比较,或手动检查快照。快照比较不可维护,因为布局中的任何更改都需要重新获取所有测试快照,而且手动检查非常耗时。

有没有人知道有任何方式(在硒或其他)来实现这一目标?

回答

2

这并不好,但它可以在一定程度上完成。

对于定位,可以使用WebElement的getLocation()(Java doc,但所有Selenium绑定中都存在相同的方法)。请注意,大多数浏览器呈现的方式稍有不同,所以在使用较旧的IE时,不要指望事物像素完美。而且,当例如事物可能稍微有点不同时在CSS中定义的第一个字体没有找到,并使用替代方法。不要太依赖这种方法。但是如果你能够让你的测试变得健全并且你的环境保持稳定,那么它就会起作用。

对于对准,我写WebDriver断言元素是目视内部另一元件的一个简单的Java方法。

应该没有错误的否定,但是当内部元素在视觉内部但是其(不可见的)实际边界“偷看”时可能会出现一些误报。然而,我并没有碰到这个问题,因为我的真实经历,因为漂亮的网站行为良好,不需要这样的黑客:)。尽管如此,这还不算什么,Selenium也不是为这类工作设计的,所以实施更复杂的检查可能会更困难。

public static void assertContains(WebElement outerElem, WebElement innerElem) { 
    // get borders of outer element 
    Point outerLoc = outerElem.getLocation(); 
    Dimension outerDim = outerElem.getSize(); 
    int outerLeftX = outerLoc.getX(); 
    int outerRightX = outerLeftX + outerDim.getWidth(); 
    int outerTopY = outerLoc.getY(); 
    int outerBottomY = outerTopY + outerDim.getHeight(); 

    // get borders of inner element 
    Point innerLoc = innerElem.getLocation(); 
    Dimension innerDim = innerElem.getSize(); 
    int innerLeftX = innerLoc.getX(); 
    int innerRightX = innerLeftX + innerDim.getWidth(); 
    int innerTopY = innerLoc.getY(); 
    int innerBottomY = innerTopY + innerDim.getHeight(); 

    // assures the inner borders don't cross the outer borders 
    final String errorMsg = "ughh, some error message"; 
    final boolean contains = (outerLeftX <= innerLeftX) 
      && (innerRightX <= outerRightX) 
      && (outerTopY <= innerTopY) 
      && (innerBottomY <= outerBottomY); 
    assertTrue(errorMsg, contains); 
} 
+0

谢谢!我会测试一下。 – Stilltorik

2

如果您使用术语验证的含义:“测试我们已经构建了正确的东西”,我会说这几乎不可能自动化。如果不是让一些人真正使用它,你会如何判断它看起来是否令人愉快或容易使用?

这种视觉检查也是人类擅长的。如果您在开发网站时一直使用网站,那么如果布局等有些可疑,您会很容易注意到。

对于功能自动化测试是个好主意。

+0

我意识到电脑不是很擅长回答“它看起来很漂亮”的问题。但我希望能够定义一些规则(这和这应该是对齐的,等等),可以自动检查。我知道手动检查是最可靠的方法,但如果我们能够拯救自己,那会很棒:-) – Stilltorik