首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

应用selenium测试zk组件技巧

2012-08-15 
使用selenium测试zk组件技巧对zk开发的ajax应用,在使用selenium这样的自动化测试工具测试时会遇到很多困难

使用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 + "']");
来操作这个对象,方便多了。
输入框事件
在zk生成的按钮可以增加自定义的事件来检查某个输入框内输入字符串是否符合要求。这时候如果使用selenium.type命令在输入框中输入,就会发现zk总会认为输入的内容是空的。原因为,selenium的type命令和手工在浏览器中输入字符有不相同的地方,手工在浏览器中输入字符会自动触发此输入框的onchange和onblur这两个javascript事件。而selenium的type命令不会,
解决方法:
在使用type后,手工触发一下change和blue事件。如:

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文件出错,提示找不到很多引用的类。
请赐教
  这个貌似该发到入门版。
用eclipse导入源码后会自动编译啊...找到对应文件夹下的class文件就是了--后来上网搜了一下“eclipse import projects”
原来是按一下步骤导入源代码 :
新建一个“java 项目” 名为“zksrc”
————>单击“next”,选中“create project from existing sourc”(http://forums.java.net/jive/thread.jspa?messageID=278985)
-->
找到zk源码目录。
ok,过了一会看到目录下“bin”里生成了zk的class文件。

非常感谢您的帮助!:)

热点排行