注意事项
可能原因: 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 代码的权限。