selenium - webdriver 元素等待

页面加载元素,有时会有延时,造成自动化测试的不稳定。可以通过设置元素的等待延时来解决,一般有3种方法:

  • 显示等待
  • 隐式等待
  • sleep()

下面分别介绍:

1. 显示等待

稍复杂,不常用,so~~

2. 隐式等待 implicitly_wait()

 通过一定的时长,等待页面上的元素加载完成。driver.implicitly_wait(10)

特点:

  • 设置的等待时长为10秒,并不是一个固定的等待时间
  • 不会影响脚本的执行速度
  • 不针对页面上的某一特定元素进行等待。

规则:

  • 当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;
  • 若定位不到,则以轮询的方式不断的判断元素是否被定位到。

例如:在第8秒定位到元素,则继续执行,若超出设置的时间10s还没有定位到,则抛出异常(本例中对异常进行了处理)

from selenium import webdriver
import time    

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

driver.implicitly_wait(10)  # 设置等待时长为10s

try:
    print(time.ctime())     # 打印:Mon Mar  9 19:14:41 2020
    driver.find_element_by_id('su1')
except Exception as e:
    print(e)                # 打印异常信息:Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="su1"]"}
finally:
    print(time.ctime())     # 打印:Mon Mar  9 19:14:51 2020(和前一个时间,间隔10s)
    driver.quit()

3. sleep()

 可以设置固定时间的休眠等待

from selenium import webdriver
import time      # 导入time模块

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

time.sleep(0.5)   # 休眠0.5秒
driver.find_element_by_id('kw').send_keys('fjdkasljf')
time.sleep(2)     # 默认以秒为单位,休眠2秒

driver.quit()

猜你喜欢

转载自www.cnblogs.com/xiaochongc/p/12450385.html