问题描述

在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本:

1. UI修改 (比如增加了弹出框或新添加了form等等)

2. 操作顺序不同

3. 多标签或多个Form切换场景

根本原因

前面提到的这些动作都会引起DOM结构的变化 , 导致定位元素的路径和之前不同; 或者多个标签切换时共用某个控件,该控件结构虽然相同, 其引用路径也相同, 不特别说明的情况下只会去寻找第一个找到的控件, 而有时这个控件是deactive的. 凡此种种, 皆需要修改脚本.

解决办法

因为控件的结构相对是稳定的, 所以每次在写元素的路径时不要用直接生成的xpath(包含整个DOM的路径), 而是自己按照特定格式组合一个路径出来. 比如下面这个元素, 在多个标签页都存在,而且可以通过不同的操作顺序调出该控件.

如果直接复制xpath, 在最简单步骤下, 路径是 : /html/body/div[7]/div/div[2]/div/div[1]/div/div/div[2]/button

 在更复杂一些操作下仍然复制xpath,路径是  :   /html/body/div[11]/div/div[2]/div/div[1]/div/div/div[2]/button

解决办法:

1. 找到该元素上层相对固定结构的一个元素(一般是控件的上层)作为起点元素, 且在DOM结构中唯一.

如上例中, 找到的元素 class = 'ant-confirm-body-wrapper'  (该class在整个DOM结构中是唯一的)

2. 从该起点元素找起, 起到要定位的元素(这之间的结构因为是一个控件内相对固定), 完整的xpath结构可以写成:

//*[@class=\'ant-confirm-body-wrapper\']/div[2]/button

注意: 有时, 起点元素到需要定位的元素中间有很多层div结构, 手动去找极易漏掉div或出错, 这时可以在该起点元素上加id.

a. 选中起点元素, 右键点dd attribute, 然后添加id (id的值可以自己随意添加,只要是唯一的就可以).

  

b. 找到需要定位的元素复制xpath, 得到路径 : //*[@id="unique"]/div[2]/button.

   c. 将上述步骤中得到的路径 id部分替换成class. 所以需要定位元素最终脚本中使用的路径是:  //*[@class=\'ant-confirm-body-wrapper\']/div[2]/button

提高测试脚本复用性降低DOM结构引起路径变化的影响的更多相关文章

  1. 读《实战GUI自动化测试》之:第三步,如何提高测试结果分析的效率

    转自:http://www.ibm.com/developerworks/cn/rational/r-cn-guiautotesting3/ 所谓自动化测试,就是“自动化”+“测试”.自动化本身显然不 ...

  2. js实现DOM结构

    /* 编写一段js脚本生成下面的DOM结构.要求使用标准的DOM方法或属性 <div id='example'> <p class='slogan'>淘,你喜欢</p&g ...

  3. VC图形绘制双缓存的代码复用性讨论

    在前文中已经讨论了如何实现界面绘制双缓存的问题,前文网址如下: http://www.2cto.com/kf/201111/112429.html 双缓存的主要思路是:先把图形绘制到内存DC中,然后再 ...

  4. Class撑起了OOP世界的天。Class类是OO的基本单元,OO的世界都是通过一个一个的类协作完成的,提高软件的重用性、灵活性和扩展性(转)

    引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的“社会”关系,从而让我们抛弃书上的那些死记硬背的概 ...

  5. JMeter-使用Badboy录制Web测试脚本

    JMeter是纯Java编写的软件功能和性.能测试工具,其录制脚本过于笨拙和复杂.而Badboy是用C++开发的动态应用测试工具,其拥有强大的屏幕录制和回放功能,同时提供图形结果分析功能,刚好弥补了J ...

  6. 【jmeter】jMeter使用Badboy录制Web测试脚本

    JMeter 是纯Java编写的软件功能和性.能测试工具,其录制脚本过于笨拙和复杂.而Badboy是用C++开发的动态应用测试工具,其拥有强大的屏幕录制和回放 功能,同时提供图形结果分析功能,刚好弥补 ...

  7. 如何将自己的测试脚本分离成PO模式的测试框架

    1 PO模式 1.1 PO模式介绍 Page Object Model 测试页面和测试脚本分离,即页面封装成类,供测试脚本调用. (将项目分为page.py和test.py) 测试用例:就是excel ...

  8. ltp 测试流程及测试脚本分析

    LTP介绍 (2011-03-25 18:03:53) 转载▼ 标签: ltp linux 压力测试 杂谈 分类: linux测试 LTP介绍 一.LTP介绍1.简介LTP(Linux Test Pr ...

  9. DOM2级提供的对DOM结构执行深度优先遍历 笔记

    NodeIterator和TreeWalker这2个类型可以基于给定的起点对DOM结构执行深度优先遍历.(我测试用的浏览器是Chrome,介绍说IE不支持DOM遍历,但是不知道最新的IE支持不支持) ...

随机推荐

  1. 自设table表格,获取内容,并经弹出框的url传参,获取结果显示在弹出框,并加载合计

    table表格,选择框 form id="editForm1"> <table class="table_form"> <td > ...

  2. combination sum、permutation、subset(组合和、全排列、子集)

    combination sum I.permutation I.subsets  I 是组合和.全排列.子集的第一种情况,给定数组中没有重复的元素. combination sum II.permut ...

  3. C语言关键字register、extern、static、一些总结,及项目中使用的心得

    首先介绍两个概念: 一.变量的生存周期: 变量从建立到撤销的时间段成变量的生存周期.静态变量,从变量产生到整个程序执行结束.当函数使用变量结束后,变量的存储空间依然存在,变量的值也会随着函数的对其的使 ...

  4. AngularJs 隔离作用域

    初学NG,有诸多的不解,今天看了一篇文章,原文地址:https://segmentfault.com/a/1190000002773689#articleHeader0 ,本文运行的代码也出处此. 里 ...

  5. 与班尼特·胡迪一起做生意 (HZUN-2261)

    与班尼特·胡迪一起做生意 AC Time Limit:  1 s      Memory Limit:   256 MB Description 马爷作为2-80X的资深土财主,靠着敏锐的商业嗅觉不断 ...

  6. win10更新失败——适用于Windows 10 Version 1709 的03累积更新,适合基于x64系统(KB4088776)更新失败

    相信最近很多人被windows的更新折磨坏了,下面来介绍一下解决办法,有用的话请点赞! 首先将C盘中的这个文件夹删除:"C:\Windows\System32\Tasks\Microsoft ...

  7. JavaScript函数节流和函数防抖之间的区别

    一.概念解释  函数节流和函数防抖,两者都是优化高频率执行js代码的一种手段.  大家大概都知道旧款电视机的工作原理,就是一行行得扫描出色彩到屏幕上,然后组成一张张图片.由于肉眼只能分辨出一定频率的变 ...

  8. jdk和tomcat环境配置

    一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...

  9. POJ 2411 解题报告

    传送门:http://poj.org/problem?id=2411 题目简述 有一个\(W\)行\(H\)列的广场,需要用\(1*2\)小砖铺满,小砖之间互相不能重叠,问 有多少种不同的铺法? 输入 ...

  10. 读取本地outlook邮件内容

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...