`
sdyouyun
  • 浏览: 119457 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用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");
分享到:
评论
5 楼 tianhama 2009-02-25  
本人ECLIPSE的菜鸟,尝试以下步骤导入,结果workspace目录下连build目录都没有生成,不会自动build--->
1)新建一个“java 项目” 名为“zksrc”
2)想zksrc项目“import”-->"FileSystem" 导入zk源码
--后来上网搜了一下“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文件。

非常感谢您的帮助!:)

4 楼 sdyouyun 2009-02-24  
  这个貌似该发到入门版。
用eclipse导入源码后会自动编译啊...找到对应文件夹下的class文件就是了
3 楼 tianhama 2009-02-24  
厉害,我找到了原jar包里的HtmlBasedComponent.class文件 ,但有个问题,我怎么把我修改后的 HtmlBasedComponent.java编译成HtmlBasedComponent.class呢 ,直接编译单个HtmlBasedComponent.java文件出错,提示找不到很多引用的类。
请赐教
2 楼 sdyouyun 2009-02-23  
用winrar或者其他的压缩软件打开jar包,直接替换编译后的那个class文件即可
1 楼 tianhama 2009-02-23  
朋友,您说"修改org.zkoss.zk.ui.HtmlBasedComponent这个类",可是,JAVA使用ZK框架时是以jar包形式引用的,如何修改jar包里的源码?
另,我尝试了一下,把zk源代码down下来,按照你的提示修改了,htmlbasedcomponent类,但不知道怎么压缩成jar包,可否教我具体步骤?

相关推荐

Global site tag (gtag.js) - Google Analytics