在web自动化中,对于复杂页面,元素定位务必要准确,这里仅以xpath为例,记录下element not interactable错误的排查方法:
1、xpath定位到的元素错误,如果是元素错误,通过chrome的控制台复制下元素当前的xpath和之前做比较即可。
2、xpath定位到的元素非唯一。如果能够找到元素,但抛出element not interactable,需考虑你的xpath是否唯一,直接在chrome控制台使用js验证:
打印元素text:(xpath是元素的xpath)
document.evalute(xpath,document).iterateNext()
点击元素:
document.evalute(xpath,document.body,null,9,null).singleNodeValue.click()
如果上述验证都无法有效控制元素,说明你的xpath是有问题的,xpath主要有两类问题:
a.使用的绝对路径中某个div的顺序变了,如原来是div[7] 现在变成了div[11]
b.使用的相对路径中的xpath逻辑表达式指向了多个元素,直接到chrome控制台中搜索你xpath中匹配的值即可,如下图该 class明显指向了20个元素
所以,当我们要使用xpath定位元素时,最好先找到该元素(或子元素或父元素)的某个唯一属性值,再使用相对路径,常用xpath逻辑表达式如下:
//div[contains(@class,"")] #class包含某值的元素
//div[@id="" and @class=""] #class、 id是某值的元素
//div[contains(@sytle,"")]/parent::div[contains(@class,"")] #style包含某值的元素的父元素,父元素class包含某值
还有很多,不一一举例了,主要是怕以后自己忘记,在此mark下。