在 Selenium 中测试 GWT SimplePager ImageButton 启用状态
Posted
技术标签:
【中文标题】在 Selenium 中测试 GWT SimplePager ImageButton 启用状态【英文标题】:Test GWT SimplePager ImageButton enabled state in Selenium 【发布时间】:2013-01-06 08:02:12 【问题描述】:我们正在使用SimplePager
提供的 GWT 来提供通过数据集的记录/页面导航。我们想测试我们是否正确控制了 Next/Previous 按钮的启用状态。虽然 SimplePager 允许我们为按钮指定启用/禁用的图像,但“按钮”本身是 ImageButton
的内部类,它扩展了 Image
而不是 Button。因此生成的 html 不使用 Button 启用/禁用属性,而是为每个状态提供不同的嵌入图像。
有什么合理的方法可以检测 Selenium 中 SimplePager 导航按钮的启用状态吗?
【问题讨论】:
【参考方案1】:在标准实践中,您应该创建自定义组件,比如说图像按钮。我建议您使用ISFW,它提供了creating custom component 的功能,可以与注释一起使用。在组件中,您可以根据 AUT 指定行为。
【讨论】:
我想你可能错过了我的问题的重点。我想使用 SimplePager 而不是重新发明一个并行且几乎重复的实现。我希望有一些策略来检测 SimplePager 内部使用的子组件 ImageButton 的启用/禁用状态。 如果我理解正确,那么以下自定义组件可以满足要求 public class ImageButton extends Component public ImageButtom (String loc) super(locator); @Override public boolean isEnabled() //自定义表示!返回 getAttribute("class").contains("imgdisabled"); //return getCssValue("background").contains("imgdisabled"); //return getAttribute("src").contains("imgdisabled");您可以在测试页面中使用此组件代替 Webelement @FindBy(locator="locator") ImageButton prevButton; @FindBy(locator="locator") ImageButton nextButton;在您的测试代码 page.prevButton.verifyEnabled(); page.prevButton.assertEnabled();【参考方案2】:重写代码示例以获得更好的格式。
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();
【讨论】:
再一次,我不是在寻找类似于 GWT 的ImageButton
的新东西,而是在寻找一种方法来测试 GWT 的 SimplePager
,它在内部使用ImageButton
作为导航按钮。如果我听从你的建议,我不仅要重新定义 ImageButton,还要重新定义 SimplePager。【参考方案3】:
查看 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 测试的 jvm 可能无法引用已编译的 GWT 代码(即调试 GWT 应用程序时运行的代码)。
或者,你可以继承SimplePager
,而不是使用DEFAULT_RESOURCES
客户端包,传入你自己的,然后你可以控制用于禁用按钮的类名(通过创建你自己的Style
类,它只是包装了您从原始客户端捆绑包中获得的现有包,但在返回值中添加了前缀或其他内容)。
这有点乱,因为组件被完全封装了,你正试图了解它的内部。
【讨论】:
以上是关于在 Selenium 中测试 GWT SimplePager ImageButton 启用状态的主要内容,如果未能解决你的问题,请参考以下文章