【WebDriver】解决ElementNotVisibleException方法总结

    xiaoxiao2022-07-05  162

    1、首先排除是否是页面未加载完成的问题。页面响应时间比较慢,导致定位的元素还没加载出来,就会报错ElementNotVisible,这时可以在代码里加上一定的等待时间,如:Thread.sleep(3000) 。

    2、其次排除是否是定位有问题,可以用chrome浏览器的xpath healper工具来验证

    如上图,写的xpath能够定位到页面中相应的元素,定位到的元素黄色显示。

    3、如果用xpath healper确定能定位到元素,但是跑用例的时候还是报元素不可见异常,这可能是由于用@class属性来定位,特别是class中含有复合类的定位时,也可能会报这个错误,这时可以用其它标签或属性来定位,也可以用xpath的绝对路径来定位

    4、上面两步还不能解决的话,就可以检查该元素的样式或父级及以上元素是否含有不可显示属性,需要检查元素是否具备如下特性:

    visibility!= hidden display != none (is also checked against every parent element) opacity != 0 (in rc2 this is no longer checked for clicking an element) height and width are both > 0 for an input, the attribute type != hidden 如果有不符上面的特性之一,那么就用js脚本来处理,用js操作元素参考博客:http://blog.csdn.net/galen2016/article/details/56847545

    5、还有一种情况,就是选取元素的时候,可能存在两个相同的,但一次只会用一个,这两个区别就有一个样式的属性是不可见的,这个时候选取元素时要去掉不可见属性,如下例子:

    如上图,启用流程按钮滑到右边时,该元素增加了display:none属性,此时如要向左滑可以如下方法来定位 WebElement label = driver.findElement(By.xpath(“//div[@class=’el-switch__label el-switch__label’ and not(contains(@style,’display:none’))]”));

    6、最后,可能是编写脚本流程没有按照正常的操作步骤来进行,导致操作的元素没有在当前页面。

    最新回复(0)