var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2010年05月10日

    如何控制相同对象中的一个

    分类:

    这里所说的相同对象,是指具有相同类型、标题的元素。这种情况一般在界面自动化中少见,但也会偶尔碰到。解决方法是用一种trick:首先找到你想要控制对象内的一个元素,确保该元素仅该对象才有,然后返回该元素的父对象即你想要控制的对象。

     

     

    对比上图,1为独一元素,其父对象为2为我们所想要操控的。

     

    这里可能会有人思考:如果用录制回放工具能否实现点击OK按钮这一操作?下面用流行工具QTP 10来录制这一操作,录制生成脚本代码:

    Dialog("goo スティック 6.0").Dialog("goo スティック 6.0").WinButton("OK").Click

    恢复录制初始环境,运行该脚本,结果报错:“Cannot find the "OK" object's parent "Windows インストーラー" (class Dialog). Verify that parent properties match an object currently displayed in your application.”,移动QTPObject Spy可以发现它把不在前台的相同窗口认成了其父。虽然最后把该按钮加入QTP的对象库才解决该问题,但还是花费了不少工时。从以上评估可以清晰地看出QTP虽然实现层级识,但其对象探测机制并不很可靠。

     

    从以上写代码到利用录制回放工具操作,大家可能已经发现了录制回放工具一个明显的弱点:录制回放效率高是这种工具的优势,也是其失败的最大症结。录制回放这个需求要求此类工具以某一特定逻辑捕获回放对对象的操作,而一旦该操作不符合事先预期的这个逻辑,该操作回放时就会失败。所以评估到底是写代码还是用录制回放工具来做界面自动化还是需要好好考虑:一面是成本比较高但稳定性好,一面是效率高但不灵活,毕竟选用录制回放工具的终极目的仍然是所有操作全部录制生成并不需要写一行代码

    分享到:

    历史上的今天: