博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium自动化测试之学会元素定位
阅读量:6246 次
发布时间:2019-06-22

本文共 1140 字,大约阅读时间需要 3 分钟。

这是我经常被问到的一个问题,也是我很讨厌回答的问题,因为要想回答这个问题需要知道上下文。什么样式的元素,有哪些属性,是否有表单嵌套,都尝试了哪些定位方法。。。而且没几个提问者能事先详细的说明这些。哪儿像提bug一样描述重现步骤,而且每一步都截图,生怕开发重现不了。反正,向我提问者没见过这样的,大多就报着试试态度,你爱回不回,碰碰运气说不定就回我了。

当然,我写这一篇文章的目的肯定不是为了吐槽,我是打算拿这个链接丢给他看,所以,这里会总结常见几种情况,以及解决办法。如果本文能不解决你的问题,你问我也没用。

1、是否有表单嵌套。

311516-20180725205158700-781132077.png

像这样顺着定位的元素往上找,如果找到了<iframe> 标签说明你定位的元素是在表单里面的,你需要先切换到这个表单,再定位元素。

2、是否打开了新窗口。

311516-20180725205451549-1788371853.png

像这样的,就是两个窗口,从登录窗口点击“注册”打开的新窗口。不切换到注册窗口怎么操作?

本来多窗口不是眼瞎都能看出来,但是,前两天一个同学的情况,登录界面,点击了登录之后旧的登录窗口关闭,新的登录之后的窗口打开。这就有点迷惑人了。不过,你依然可以通过多窗口的处理来解决这个问题。

3、元素不可见或不满足条件。

有些元素并不是不存在,而是不可见;或者你的操作步骤缺少前提步骤。

311516-20180725205523598-940584177.png

像这样,我要想操作“搜索设置”不需要先鼠标悬停在“设置”上么?鼠标悬停“设置”链接上就是前提条件。

311516-20180725205537769-1009326819.png

请把鼠标从“设置”上面移开,是不是发现display为none,它所在的整个

标签就是因为这个属性的变化而隐藏的。

4、定位方式不唯一,或根本就找不到任何元素。

我都试了好几种定位方式了,怎么看这个元素就是这个属性,没错啊!这应该是你最常遇到了情况。这个时候怎么办呢?很简单。检验你的定位方式到底有没有找到元素。

311516-20180725205557193-457323637.png

不管用什么定位方法,请用find_elements_by_xxx() 来定位一组元素。如果统计结果是0,说明你的定位方法找不到任何元素,你问我也帮不了你。如果大于1,说明你这种定位方法不是唯一的。

其实,不唯一还好办,我们可以进一步筛选。

311516-20180725205613447-1059418659.png

把元素的所有属性都打印出来,看看第几个才是你想要的。

311516-20180725205627590-1403227144.png

然后,你就可以愉快的选择你想要定位的元素了,像这样。

311516-20180725205638612-1676849482.png

最后,赠送一个快速定位元素技巧。

启动Chrome浏览器,打开“开发者工具”,切换到console标签,通过 document.querySelector() 方法使用CSS语法定位元素。

311516-20180725210718202-2064391921.png

你可以快速的验证CSS是否可以定位到元素,如果可用就复制到Selenium当中,不用每次通过运行Selenium脚本来验证,效率上快上很多。

什么?你不懂CSS定位?或者你看不懂我在讲什么。 你可能缺一本《Selenium 自动化测试实战 --基于python语言》

转载地址:http://bmoia.baihongyu.com/

你可能感兴趣的文章
使用四种框架分别实现百万websocket常连接的服务器{转}
查看>>
python 之 随机数获取
查看>>
Linux开机启动流程
查看>>
Docker 介绍: 相关技术
查看>>
xcode中Version和Build的区别
查看>>
RedHat下利用bonding实现linux服务器网卡绑定
查看>>
libjingle : sessionmanagertask 分析
查看>>
主从DB与cache一致性
查看>>
Nginx使用的php-fpm的两种进程管理方式及优化
查看>>
CTeX-2.4.6-Full
查看>>
python编码
查看>>
增加squid的filedescriptors
查看>>
Xmanger远程登录Linux服务器
查看>>
Windows Ready Boost,使用闪存设备提高性能
查看>>
mysql导入导出包括函数或者存储过程
查看>>
工作流程组件介绍 ━ RDIFramework.NET ━ .NET快速信息化系统开发框架
查看>>
Struts2中Action访问Servlet API的三种方法
查看>>
个性化自己系统的ContextLoaderListener实现
查看>>
Java之final修饰
查看>>
CentOS下添加用户并且让用户获得root权限
查看>>