selenium 有id但是经常定位不到解决办法

注意事项

 

可能原因:
1.需要定位的元素没有ID属性;
2.需要定位的元素存在ID属性,但需要定位的元素的父节点存在iframe或者frame,需要切换到包含所要定位元素的iframe或者frame中;
3.需要定位的元素存在ID属性,页面元素没有加载完成;
4.需要定位的元素存在ID属性,在自动化的代码中ID的属性值书写错误。

5.可能有多个同样属性值的元素,用开发者模式的console 用js检查

6.id属性值是否为复合形式,如id=“ghh saa aa ssdf”,这种情况只用其中一个ghh定位就可以了

7有些id是动态的,变化的,所以不一定可以定位到

8.确定是否在同一个页面,有无alert,或者弹出窗

主要是id是动态的,网上说最好不用id定位什么的,有动态id,不易维护,定位的宗旨是哪个简单就用哪个定位,不一定用id,但是如果没有固定的属性值,就要用xpath,css,这两种出错率很低,但是比较复杂,效率低些,在app的自动化上就不宜采用了

通过id定位不到元素有几种情况:

1:需求更改过后id变动过了。

2:id是一个动态元素(通常是字母+变化数字的形式)

3:需要定位的属性没有可选的id或者唯一的属性值,但是难定位。

4:定位的id后面带有无法点击便签。

5:id在隐藏标签内。如一些富文本,或者导入的插件,还有一些文本属性值

页面代码

明明就有id的值,但是在定位元素的时候,总是报错,找不到元素

 把by.id换成by.xpath就可以了

 driver.findElement(By.xpath("//*[@id=\"TANGRAM__PSP_10__password\"]")).sendKeys("zxcvbn");

如何查看id是否会变动

分两次打开同个界面,查看元素id,就可以对比id是否变化,如果变化,建议用xpath方式

PS:各种浏览器对xpath的支持情况不一样,像IE就差点,所以有时候会出现xpath在一个浏览器能定位到但在另一个浏览器定位不到的问题

 

我们可以看到xpath 的定位方式非常灵活和强大的,但是它的缺陷也非常明显:

1、性能差,定位元素的性能要比其它大多数方式差;

2、不够健壮,xpath会随着页面元素布局的改变而改变;

3. 兼容性不好,在不同的浏览器下对xpath 的实现是不一样的。

    另外,CSS 定位语法比xpath 更为简洁,定位方式更多灵活多样;不过对CSS 理解起来要比xpath 较难;但不管是从性能还是定位更复杂的元素上,CSS 优于xpath,笔者更推荐使用CSS定位页面元素。

    自动化测试的元素定位一直是困扰自动化测试新手的一个障碍,因为我们在自动化实施过程中会碰到各式各样的对象元素。虽然xpath 和CSS 可以定位到复杂且比较难定位的元素,但相比较用id 和name 来说增加了维护成本和学习成本,相比较来说id/name 的定位方式更直观和可维护,有新的成员加入的自动化时也增加了人员的学习成本。所以,测试人员在实施自动化测试时一定要做好沟通,规范前端开发人员对元素添加id/name 属性,或者自己有修改HTML 代码的权限。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值