#要用到的库:from selenium.webdriver.common.keys import Keys
在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait()、隐式等待implicitly_wait()、强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别
- sleep(): 强制等待,设置固定休眠时间。后脚本的执行过程中执行 sleep()后线程休眠,而另外两种线程不休眠。
- implicitly_wait():隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
- WebDriverWait():显示等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。
# 组合键 - send-keys
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 1、等待
# 1、傻等 - 5秒 15秒
import time
time.sleep(2)
# 智能等待 - 如果说你下一行的代码当中用到的元素,那我就设置一个等待极限。
# 在这个极限范围之内,任何一个时间点元素出现了,就不等了,去执行下一行代码。
# 2、隐性等待 implicitly_wait
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.implicitly_wait(30) # 等待元素存在、命令执行完成
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("天气",Keys.ENTER)
# 点击百度一下进行搜索,与执行ENTER回车键效果一样
# driver.find_element_by_id("su").click()