自动化过程中控件查找的一点心得

发表于:2009-7-02 15:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:nanfei    来源:Taobao QA Team

  在编写自动化脚本过程中,遇到过这样的问题,几个并行的控件结构中,你要通过控件其中的一部分,找到控件的另一部分。如下图所示:

  像这样两个并列控件体,你要点击“和她交换真心话”时,就会出现多个,而不能定位是哪一个,当然这里是举例的2个,实际你可能有几个的个数都是不知道的(不过也可以通过测试数据的准备,进行控制,不出现这样复杂的环境)。这种情况,我们可以通过告诉我们“标题”,从而找到对应的后面的操作控件。比如告诉你“你能接受你的伴侣大你几年”,从而找到这个框内的“和她交换真心话”进行点击。

  我们实现这样的查找,我想到有2个方法可以用。

  第一:借助数据库。我们可以查看html源码,这种并列控件体中,操作控件和标题之间,一般是会有个关联属性的,目前我碰到的情况基本都是通过一个“ID”进行关联的,而这个“ID”可以通过“标题”在数据库中查找到。所以我们可以通过“标题”在数据库中找到对应的“ID”,然后通过这个“ID”准确找到我们真正需要操作的控件。

  此方法,实现简单,分析关联属性,查找数据库,就可以定位到需要操作的控件。但频繁操作数据库,并不是可取的方式,另外对脚本的执行效率也会有影响。另外这个方法不是任何情况都适合,关联属性不一定能找到,关联属性的值不一定是从数据库得到。

  record = DataOperate.get_one(”select id from poll_comments_s where content=’”+reviewcontent+”‘”)

  @ie.text_field(”id”,”commentContent:”+record['id'].to_s).set answercontent.to_s

  第二:利用DOM节点树。这种并列情况,并列的控件体,其内部结构是完全相同的,而且每个控件体内,都是结构相同的节点树。我们只要利用DOM节点树的遍历,就可以定位到该控件体内我们需要操作的控件。问题的关键是,我们一开始怎样定位到这个控件内的一个节点上,我们所知道,并不变的只有2点:1、节点树的结构;2、“标题”。所以我们只能通过“标题”定位到这棵节点树的一个节点上,然后根据节点树的结构,搜索到我们需要操作的控件。

  此方法,是利用DOM节点树,因此它是适用范围是非常广泛的,而且不需要操作数据库,不会对脚本的执行效率有影响。

    elementtest = @ie.locate_tagged_element(”A”,”text”,title)
    parent_element1=elementtest.parentNode
    parent_element2=parent_element1.parentNode
    parent_element3=parent_element2.parentNode
    
    elementdest1 = parent_element3.getElementsByTagName(”a”).item(1)
    elementdest1.click()

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号