在 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 启用状态的主要内容,如果未能解决你的问题,请参考以下文章

在Selenium中测试GET简单寻呼机图像按钮启用状态

如何在 JMeter 的 Webdriver Sampler 中使用 Selenium

Python之Selenium(自动化浏览器测试)

GWT,打开/查看测试中的窗口类

GWT SyncProxy 测试

GWT 测试用例运行失败:JUnitFatalLaunchException