有时候这些问题的搞到人抓狂,还好解决了。希望这些思路能帮到需要帮助的童鞋:
问题:系统页面中有一个复选框,使用对象侦测器可以捕捉到此对象,但是执行脚本的时候却不能点击到,而且录制点击该复选框时,并不能生成脚本语句,而是毫无反应。
下面放出该复选框:
我们再来看看使用侦测器捕捉到的对象:
注:xpath这个属性是博主后面自己加的,不是侦测到的,忽略即可。
脚本的语句如下:
Browser("Browser").Page("测试系统").Frame("Frame").WebElement("WebElement").Click()
问题分析: 可以看到改对象的类是WebElement,并不是checkbox类型。所以需要使用click的方法,不能使用set的方法。
思路一、 可以注意到索引的值是21,所以又可能是索引的原因,修改索引的值为0或者1,执行脚本语句。失败,并不能勾选到。
出现这一问题怀疑就是定位不到元素的位置或者元素的属性一直都是变化着的。
思路二、捣鼓了一阵子之后,只能转战其他的办法,这时搜索到可以使用xpath来定位元素。这时候可以捣鼓成:
1、直接将xpath的路径写入到脚本语句中,如:
Browser("Browser").Page("测试系统").Frame("Frame").WebElement("xpath:=(//*[@id="ext-gen164"]/div/table/tbody/tr/td[2]/div/div)").Click()
2、对侦测的对象添加一个xpath属性,将值丢进去。然后执行该对象。
然而,结果都是不行的。
思路三:重点来了,经过大佬的点拨,有了一些灵感。出现这种问题,需要看看该条记录是不是使用框架生成的。博主就是符合这种情况。
怎么解决?
我们要找到是那种框架,如easyui或者是extjs。然后根据该框架的api来生成一个JS,使用QTP执行该JS就可以选中了。代码如下:
Browser("Browser").Page("XXX系统").Frame("Frame").RunScript("Ext.getCmp(""grid"").getSelectionModel().selectRow(0, true);")
这里问题就解决了。
思路四:这个思路是网上搜的,没有实践过,可以拿来参考参考。
原理就是安装对应的框架的插件,然后再捕捉改对象,这时候的对象就应该可以执行了。具体的方法可以点击这个链接:
http://blog.csdn.net/kernzhang8/article/details/5705385
好了,希望这些思路能够帮到你!
<—————————2017-12-28————————————–>
补一下有关EXTJS方面另外一部分的问题:
从前文可以看出如果前面又复选框的话,我们可以使用Ext.getCmp(""grid"").getSelectionModel()
这个方法,但有时候列表的内容中没有复选框,只有纯粹的数据,所以这时候还使用复选框的那个方法是获取不到所要的行的。因此,需要使用:
Ext.getCmp(""grid"").getStore() '这个方法
再增加一些循环,即可实现对列表内容的选取。
searchKeyword_js = """"& searchKeyword &""""
Browser("Browser").Page("测试系统").Frame("主界面").RunScript("var store = Ext.getCmp(""grid"").getStore();for(var i=0;i<store.data.length;i++){var record = store.getAt(i);if (record.data.templateNum=="&searchKeyword_js&") {uf_Edit(record.data.id ,"""","""",false);break;}}")