博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium--等待的三种方式
阅读量:4457 次
发布时间:2019-06-08

本文共 1793 字,大约阅读时间需要 5 分钟。

前戏

在我们做UI自动化的时候,最不稳定的就是页面了,由于各种原因页面的元素没有加载出来,比如网速慢,服务器响应慢等等,这时候如果我们去操作页面的元素,selenium会给我们抛出一个NoSuchElementException的异常。我们可以等待页面页面加载出来或者一段时间再去操作,这样的话大大降低了这种错误的出现。

我们可以用python内置的sleep来强制等待,或者用selenium提供的显示等待或者隐式等待的方法

相关模块:
WebDriverWait 显示等待针对元素必用
expected_conditions 预期条件类(用于显示等待)
NoSuchElementException 用于隐式等待抛出异常

 

sleep

sleep强制等待,不管元素有没有加载出来,都必须等到时间才会往下去执行

from selenium import webdriverfrom time import sleepdriver = webdriver.Chrome()driver.get('http://www.baidu.com')sleep(2)driver.find_element_by_css_selector('#kw').send_keys('python')sleep(2)driver.quit()

 

隐式等待

隐式等待不针对某一个元素进行等待,全局元素等待,隐式等待会等待整个页面加载完成,也就是说浏览器窗口标签栏中不在出现转动的小圆圈,才会执行下一步

from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom time import sleep, ctimedriver = webdriver.Chrome()driver.get('http://www.baidu.com')sleep(2)# 设置隐式等待,最多等待 5s,如果五秒内什么时候加载完就什么时候进行操作driver.implicitly_wait(5)try:    print(ctime())    driver.find_element_by_css_selector('#kw').send_keys('python')    driver.find_element_by_css_selector('#su').click()except NoSuchElementException  as msg:    print(msg)finally:    print(ctime())sleep(2)driver.quit()

 

显示等待

显示等待是针对某一个元素进行相关等待判定

from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import Byfrom time import sleepdriver = webdriver.Chrome()driver.get('http://www.baidu.com')sleep(2)driver.find_element_by_css_selector('#kw').send_keys('python')# 一共等待 5 秒钟,每 0.5s 找一次,直到通过 ID 找到element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'su')))element.click()sleep(2)driver.quit()

 

不是总结的总结

学了等待的三种方法,我最常用的还是显示等待,写一个公共的方法,把通过什么定位和定位元素抽离出来,什么时候用,传这两个参数就可以了

 

转载于:https://www.cnblogs.com/zouzou-busy/p/11135579.html

你可能感兴趣的文章
OAuth 开放授权 Open Authorization
查看>>
MongoDb数据库设计
查看>>
矩阵的线性代数意义
查看>>
最大似然估计(Maximum likelihood estimation)(通过例子理解)
查看>>
设计模式的六大原则
查看>>
/var/spool/postfix/maildrop 占用inode索引及磁盘空间解决办法
查看>>
urlRewrite url重写
查看>>
团队冲刺第六天
查看>>
淀粉质(点分治) 学习笔记
查看>>
Jenkins api java 调用
查看>>
integer promotion
查看>>
C语言Linux服务器网络爬虫项目(二)项目设计和通过一个http请求抓取网页的简单实现...
查看>>
图片预加载 解决图片加载闪动问题
查看>>
怎么处理系统蓝屏后提示代码0x000000d1的错误?
查看>>
技术分享:如何在PowerShell脚本中嵌入EXE文件
查看>>
ThreadUtil 多线程处理List,回调处理具体的任务
查看>>
DOM+Javascript一些实例
查看>>
我的软件工程之路(三)
查看>>
浅析C#中的Attribute
查看>>
深入理解Block
查看>>