selenium显示等待的高级用法

前置说明:假设现在打开一个网页,需要点击页面中的元素跳转到另一个页面,这个时候可能会出现页面没有渲染完成导致点击失败


这里拿企业微信做一个例子,现在我处于协作模块,我需要点击进入应用管理,假设浏览器打开页面后页面没有渲染完成导致我点击应用管理失败,这个时候我们可以通过显示等待的高级用法(使用复杂行为解决点击不生效的问题)。我们可以找到应用管理页面中特定元素来判断是否点击成功,我们可以看见应用管理页面中有一个微信客服的元素,那么我们可以通过selenium显示等待的高级用法进行循环点击。

1
2
3
4
5
def loop_click(driver):
self.driver.click(By.XPATH, "//span[text()='应用管理']/parent::a")
return len(self.driver.find_elements(By.XPATH, "/div[text()='微信客服']")) > 0

WebDriverWait(self.driver, 10).until(loop_click)

这里我们我们将点击应用管理的操作写在了loop_click的函数内,并且在函数的return中定义了判断结果,如果应用管理页面的元素一旦出现则loop_click函数就会返回true,证明元素点击成功。当应用管理页面的元素一直没有出现,那么len(self.driver.find_elements(By.XPATH, “/div[text()=’微信客服’]”)) > 0就会一直为false,则在显示等待设定的时间内会一直执行loop_click函数从而达到循环点击的作用。