我们使用GWT提供的SimplePager
来提供数据集的记录/页面导航。我们想要测试我们正确控制Next / Previous按钮的启用状态。虽然SimplePager允许我们为按钮指定启用/禁用图像,但“按钮”本身是ImageButton
的内部类,它扩展了Image
而不是Button。因此,生成的HTML不使用Button启用/禁用属性,而是为每个状态提供不同的嵌入图像。
有没有合理的方法来检测Selenium中的SimplePager导航按钮启用状态?
在标准实践中,您应该创建自定义组件,比如说Image按钮。我建议你使用ISFW,它提供了可以与注释一起使用的creating custom component的功能。在组件中,您可以按AUT指定行为。
重写代码示例以获得更好的格式。
public class ImageButton extends Component{
public ImageButtom (String loc){
super(locator);
}
@Override
public boolean isEnabled() {
//custom representation!...
return this.getAttribute("class").contains("imgdisabled");
//return this.getCssValue("background").contains("imgdisabled");
//return this.getAttribute("src").contains("imgdisabled");
}
}
您可以在测试页面中使用Webelement这样的组件
@FindBy(locator="locator")
ImageButton prevButton;
@FindBy(locator="locator")
ImageButton nextButton;
在您的测试代码中
page.prevButton.verifyEnabled();
page.prevButton.assertEnabled();
看看SimplePager的源代码,看起来他们使用生成器来创建css样式,其中禁用状态(和启用状态)有一个css类应用于它(我离开这个https://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/user/cellview/client/SimplePager.java?r=9614)。
因此,如果您可以以某种方式访问实际的Resources
客户端包,那么您可以调用resources.simplePagerStyle().disabledButton()
来获取一个字符串,该字符串是禁用按钮的css类,然后您可以将其用作selenium中的定位器。这可能是非常棘手的,因为运行selenium测试的jvm可能无法引用已编译的GWT代码(即,在调试GWT应用程序时运行的代码)。
或者,您可以继承SimplePager
,而不是使用DEFAULT_RESOURCES
客户端包,传入您自己的,然后您可以控制用于禁用按钮的类名(通过制作您自己的Style
类,它只包装您从中获得的现有类原始客户端捆绑包,但在返回值中添加前缀或其他内容)。
它有点乱,因为组件是完全封装的,你正试图搞清楚它的内部。