Python+Selenium自动化测试三种等待方式

2022-04-18  本文已影响0人  清风昙

1.强制等待
利用time模块的sleep方法来实现,最简单粗暴的等待方法,强制等待,不管你浏览器是否加载完成,都继续执行

import time
from selenium import webdriver
driver = webdriver.Chrome()
# 打开百度
driver.get('https://www.baidu.com')
# 强制等待3秒
time.sleep(3)
# 退出
driver.quit()

弊端:不建议使用这种等待方式,严重影响代码的执行速度
2.隐式等待
implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完)网页加载完成则执行下一步。隐式等待只需要声明一次,一般在打开浏览器后进行声明,声明之后对整个drvier的生命周期都有效,后面不用重复声明。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.implicitly_wait(5)
driver.find_element_by_css_selector("#kw").send_keys("selenium")
driver.quit()

弊端:程序会一直等待整个页面加载完成,直到超时
3.显示等待
WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。
它主要的意思就是:程序每隔x秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。显示等待必须在每个需要等待的元素前面进行声明。
由两部分组成:等待(WebDriverWait类) + 条件(expected_condition)
WebDriverWait(driver, 超时时间, 查看周期=0.5).until(条件) #每0.5秒查看一次是否满足条件
WebDriverWait(driver, 超时时间, 查看周期=0.5).not_until(条件)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 等待10s,等待过程中如果定位到元素,就直接执行后续的代码,反之等待10s后报错误信息
# 验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, ‘kw')
# 三种常用元素判断方法
# presence_of_element_located()    #元素存在
# visibility_of_element_located()   #元素可用
# element_to_be_clickable()       #元素可点击
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'kw'))
                                ).send_keys("python")  # 10秒后超时,判断元素存在,这里不需要解包

显示等待三种常用元素判断方法

presence_of_element_located()    #元素存在
visibility_of_element_located()   #元素可用
element_to_be_clickable()       #元素可点击
上一篇 下一篇

猜你喜欢

热点阅读