我正在使用他们的官方UI测试工具TestBench(基于Selenium)为Vaadin前端构建一个Page对象模式框架。
使用PageFactory,Page对象能够懒惰地定位我需要测试与之交互的web元素,但是它们不允许转换为TestBench元素。
我希望使用的特定Vaadin组件有很多便利方法,但会收到类强制转换异常。
示例:
public class TestPage extends TestBenchTestCase {
private WebElement button;
public String getText() {
TestBenchElementCommands testElement = testBenchElement(button);
ButtonElement btn = testElement.wrap(ButtonElement.class);
btn.getCaption();
}
}
此例外的结果:
java.lang.ClassCastException:com.sun.proxy。$ Proxy6无法强制转换为com.vaadin.testbench.commands.TestBenchElementCommands
我正在使用TestBenchTestCase中提供的方法来转换和包装元素。虽然获取Button文本不是最好的例子,但是有很多methods,仅仅在超类中就可以了。
无论是否为Page使用PageFactory或新实例化,都存在此问题。
可以找到WebElement作为检查isDisplayed()返回true。
运行时类型是TestBenchElement的一个实例:
com.vaadin.testbench.TestBenchElement _ _ $$ @ javassist_1 3a96d74
我想这个问题归结为,这可能吗?或者TestBench是否仅在Selenium级别(WebElement)使用Page对象模式?
如果是这种情况,则可以节省许可证的额外费用。