一、问题提出
1、我们做web自动化一般就是增删改,验证基本功能流程。比如:添加一个用户,添加完了对比数据库字段,一致则案例通过。
2、举例:我们系统后台是用vue.js框架做的,现在在添加区域管理员的时候遇到了一模一样的input标签。如下图所示。
二、问题解决过程
1、这几个input标签是一模一样的,1个 div里面有1个 div和1个 label,div里面又有2个div和input,其中的1个div才有input。通过细心发现,和label同级的div也是一样的,但是label标签是根据for属性做了区分,比如:for="username",for="mobile"这下就好办了。可以先通过label定位到它的兄弟div,然后div里面只有一个input标签,所以直接定位这个input标签就好了。
最终的xpath如下:
//label[@for="username"]/following-sibling::div//input
在谷歌浏览器调试一下,OK
跳转:
成功。
在pycharm里面发送一个AA试一下。、
代码:
-
#输入用户名
-
browser.find_element_by_xpath('//label[@for="username"]/following-sibling::div//input').send_keys("AA")
运行看看结果
大功告成!!!
2、分析如果遇到相同的标签,那么我们要看看它的兄弟是不是一样的,如果兄弟不一样,那就由兄弟去定位。
如果兄弟一样,那再上一层找爸爸。依次类推。
我们看看语法:
获取弟节点-following-sibling::
获取兄节点:preceding-sibling::
获取父节点以及混合应用:parent::
三、总结
元素定位是自动化测试的核心,而xpath能解决99%的定位问题,所以,掌握xpath编写,自动化测试成功80%。
有疑问一起留言交流!
2020年9月下午更新
现在又遇到相同的button。兄弟标签一样,爸爸也一样,爸爸的爸爸的爸爸。。。。
现在我们想定位下面这个button
思路:第一、通过class定位??我们看看
这边有一模一样的结构,不行
第二、看看这两个的div爸爸有啥不同,果然找到。不对,爸爸也是一样的,爸爸的爸爸也是一样的。。。
第三、慢慢向上查找,发现
这个div祖先不一样,所以通过这个可以确定下来这个button了
xpath:
//div[@aria-label="添加区域管理员"]//button[@class="el-button el-button--primary"]
调试
定位成功。