主要内容
1. 问题描述
在自动化测试中,我们定位元素经常面临的常见错误之一: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:...
。除了定位表达式不正确导致定位不到元素外,还有一种是发现不稳定,有时候能找到有时候找不到,甚至有些直接就是找不到。在这篇文章中,我们将进行错误原因的分析和解决方案的讨论。
2. 原因分析
其实不难发现,定位不稳定往往发生在网络不好的时候。页面可能还没加载完成就进行下一步的元素定位,此时元素还没加载出来 selenium 就会报 NoSuchElementException 的错误。
3. 解决方案
我们现在已经了解到错误的原因,接下来可以通过添加等待的方法来等待元素加载出来:
- 增加休眠时间
time.sleep()
,简单粗暴,但是不灵活; - 增加隐式等待
implicitly_wait()
,一直等待整个页面加载完成,直到超时; - 增加显式等待
WebDriverWait
,只等待需要的时间。
详情请看:Selenium系列教程 - 解读selenium等待方式