对于一般都是EditBox,RFT一般有两种方法支持对EditBox的附值操作,setProperty()和setText()。一般情况下两个方法都可以达到附值的效果,但是他们有着本质的区别,尤其是一些特定的情况下,setProperty()会成为automation的陷阱。
我没有找到公共资源下面的例子,但是在我坐在的项目里有很多setProperty()会成为陷阱的例子,这里我先简单介绍一种情况:
假设有一个EditBox,可以接受正常的字符串,但是在用户输入完字符串之后,这个EditBox会自动把所有小写字符转化成大字,比如用户输入'London’,当用户输入完鼠标离开该EditBox的时候,上面的字符串会自动变成'LONDON’。
基于上面的这种情况,下面的两种操作方式会截然不同
- setProperty执行过后,该Editbox仍旧显示为London;但是setText执行后,Editbox会把字符串转化成LONDON
- 熟悉界面开发的朋友都知道,界面控件在做校验的方法一般都是重写监听event的某些接口,比如onModify,onLoseFocus等等
- 由此可以看见setProperty仅仅是直接修改控件的属性值,但是并没有触发Editbox监听event的listener,但是setText则是模拟鼠标键盘操作,首先会点击Editbox,然后输入字符串,之后失去focus,这样setText不仅仅给Editbox附值,同时还触发了click,hasfocus,modify,losefocus等等event,这样setText附值之后,Editbox还可以继续把输入的字符串转成大写
个人推荐如果可以的话尽量不要使用setProperty的方法,界面上自动化测试本来就是模拟测试人员的鼠标键盘操作,我们应该尽量真实地再现测试人员的操作。