• Web UI 自动化单个xpath抓取插件详解


    原文地址http://blog.csdn.net/kaka1121/article/details/51878346

    单个控件获取

    需求:

    右键到某个控件上,就能获取到至多三个可以唯一定位该元素的相对Xpath,并将其标记为以上8种抽象控件之一。

    可抓取控件节点名:
    input(type=="text"、"submit"、"button"、"reset"、"image"、"checkbox"、"radio"、"file")
    textarea、select、table、a、button、span、img、i、font、div

    和上面抽象出来的8种控件对应起来,如下图:

     
    抓取优先级&策略

    image

    如上图所示:

    1.如果存在id,且唯一,则直接用id,其Xpath为:

    //input[@id=’main’]

    2.其次,如果存在name,且唯一,则直接用name,其Xpath为:

    //a[@name=’name’]

    3.再次,如果存在text,且唯一,则直接用text,其Xpath为:

    //span[contains(text(),’aaa’]

    4.如果还不能唯一定位,且存在name、text,二者组合能唯一定位,则其Xpath类似:

    //Select[@name=’name’ and contains(text(),’aaa’]

    5. 如果还不能唯一定位,则依次尝试"value","title","class","style",如果能通过其一唯一定位,则其Xpath类似:

    //XXX[@class(或者是value、title、style)=’class’]

    6.如果还不能唯一定位,则递归寻找其父节点(依次单看id、name、text、title),直到找到唯一。 。

    再从其父节点开始,取绝对路径(元素索引),加起来唯一定位,其Xpath类似:

    //input[@id=’main’]/div[1]/span[2]

    当然,这种情况开始,就应该跟开发提可测性,增加唯一的id、name之类了。

    7.如果还不能唯一定位,则寻找其所有子节点(依次单看id、name、text、title),直到找到唯一。

    再使用其子节点Xpath来唯一定位,其Xpath类似:

    //input[@id=’main’]/parent::XXX

    8.如果还不能唯一定位,则寻找其所有兄弟节点(依次单看id、name、text、title),和自己在兄弟节点中的index,直到找到唯一。

    //input[@id=’main’]/parent::XXX/XX[3]

    9.以上全不满足,则给出其绝对路径(元素索引),来唯一定位,其Xpath类似:

    /XXX[1]/XX[2]/X[5]/XXXXX[2]

    示例:

    image

    右键—>点击

    image

    抓取结果:

    image

    如上图所示,以百度首页--“百度一下”按钮为抓取对象,抓取出的三个能唯一定位的Xpath如图中③所示。

    另外,插件还对控件所在frame(①)进行抓取,此处无frame信息。

    如上图中②所示,控件被识别为click类,提供”点击”方法。

    如上图中④所示,控件被命名为“su”,调用时使用该名字,并附上备注“su”(⑤)作为控件的说明。

    点击“生成代码”

    生成基于框架的代码入下:

    @Xpath(xpath={"//input[@id='su']", "//input[contains(@value,'百度一下')]", "//input[contains(@class,'bg s_btn btnhover')]"}) 
    @Frame(frame="") 
    @Description(description="su") 
    public Click su;

    结合,框架,便能对控件进行点击操作。

  • 相关阅读:
    day14(JavaDoc)
    day15(Java流程控制)
    day12
    day.6
    day10
    day11(运算符)
    day.5
    proc -x cshell fork()
    I/O -x 标准IO fopen-fclose--fgetc-fputc--fgets-fputs--fwrite-fread--fprintf-fscanf
    I/O -x open()-read()-write()-close()-lseek()
  • 原文地址:https://www.cnblogs.com/111testing/p/8537162.html
Copyright © 2020-2023  润新知