使用selenium测试zk组件技巧
对zk开发的ajax应用,在使用selenium这样的自动化测试工具测试时会遇到很多困难。这里简单了总结了几点遇到的问题和解决办法:
快速寻找到某个组件zk组件生成的html代码很乱,有一点很恼人的是,其中每个Html元素的id号不是固定的,而是每次刷新页面都会变化。
这直接导致selenium.click("id=xxx")这样的代码不能使用了,要得到页面上的一个链接或者一个输入框,我都得小心翼翼的去翻zk生成的长长的html代码,而且页面一有更改,可能之前写的代码都不能用了。如果要是能在生成的html中,也能看到zk中的组件的id号就方便多了。
解决方法:
修改zk的源码。修改org.zkoss.zk.ui.HtmlBasedComponent这个类,在getOuterAttrs()方法中增加了一句
HTMLs.appendAttribute(sb, "autotest", getId());这样比如一个输入框生成的html代码里就会有类似<input autotest='input1'>这样的代码了,这样在selenium中就可以直接用
selenium.click("xpath=//*[@autotest='" + id + "']");来操作这个对象,方便多了。
selenium.type("xpath=//*[@autotest='" + element + "']", type);selenium.fireEvent("xpath=//*[@autotest='" + element + "']", "change");selenium.fireEvent("xpath=//*[@autotest='" + element + "']", "blur");厉害,我找到了原jar包里的HtmlBasedComponent.class文件 ,但有个问题,我怎么把我修改后的 HtmlBasedComponent.java编译成HtmlBasedComponent.class呢 ,直接编译单个HtmlBasedComponent.java文件出错,提示找不到很多引用的类。