python自动化测试selenium核心技术三种等待方式详解
目录
- 1 使用python自带模块time的sleep方式
- 2 隐式等待(implicitly_wait)
- 3 显示等待(WebDriverWait)
selenium官网手册:Waits | Selenium
slenium自动化测试中,主要涉及三种等待方式:
1 使用python自带模块time的sleep方式 缺点:即使网络条件较好时,依旧按照预定固定时间等待,一般不建议使用,脚本调试可使用。
示例脚本:
from selenium importwebdriverfrom time import sleepclass TestWait(object):driver = webdriver.Chrome()driver.get(http://www.baidu.com) def test_sleep(self):self.driver.find_element_by_id("kw").send_keys("sleep test")# sleep(2) #等待固定时间self.driver.implicitly_wait(2)# 隐式等待self.driver.find_element_by_id("su").click()self.driver.quit()if __name__ == '__main__':wait=TestWait()wait.test_sleep()
2 隐式等待(implicitly_wait) 隐式等待设置的时间是最长的时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。
注意:隐式等待对driver整个周期都起作用,一般在最开始设置一次就可以了。不要当做固定等待,哪里都设置隐式等待。
示例脚本:
from selenium importwebdriverfrom time import sleep class TestWait(object):driver = webdriver.Chrome()driver.get(http://www.baidu.com) def test_sleep(self):self.driver.find_element_by_id("kw").send_keys("sleep test")self.driver.implicitly_wait(2)# 隐式等待self.driver.find_element_by_id("su").click()self.driver.quit()if __name__ == '__main__':wait=TestWait()wait.test_sleep()
3 显示等待(WebDriverWait) 显式等待允许等待条件的发生,所以非常适合在浏览器及其DOM和WebDriver脚本之间同步状态。
需要引入包:from selenium.webdriver.support.wait import WebDriverWaitWebDriverWait参数说明:
WebDriverWait(driver, timeout=3).until(some_condition)【python自动化测试selenium核心技术三种等待方式详解】
文章图片
两种方法:until和util_not
文章图片
场景:
打开百度首页,等待页面标题出现:百度一下,你就知道,再执行输入搜索关键词,点击“百度一下”按钮。
示例脚本:
from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ecclass TestWait(object):def setup(self):self.driver = webdriver.Chrome()self.driver.get(http://www.baidu.com) def test_webdreiverwait(self):webdreiverwaits =WebDriverWait(self.driver,2)webdreiverwaits.until(ec.title_is("百度一下,你就知道"))self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test")self.driver.find_element_by_id("su").click() def teardown(self):self.driver.quit() if __name__ == '__main__':wait=TestWait()wait.test_webdreiverwait()
三种等待完整示例脚本:
from selenium import webdriverfrom time import sleepfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ecclass TestWait(object):def setup(self):self.driver = webdriver.Chrome()self.driver.get("http://www.baidu.com")def test_sleep(self):self.driver.find_element_by_id("kw").send_keys("sleep test")sleep(2) #等待固定时间self.driver.find_element_by_id("su").click()def test_implicitly(self):self.driver.find_element_by_id("kw").send_keys("implicitly test")self.driver.implicitly_wait(2)# 隐式等待self.driver.find_element_by_id("su").click() def test_webdreiverwait(self):webdreiverwaits =WebDriverWait(self.driver,2)webdreiverwaits.until(ec.title_is("百度一下,你就知道"))self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test")self.driver.find_element_by_id("su").click() def teardown(self):self.driver.quit() if __name__ == '__main__':wait=TestWait()# wait.test_sleep()# wait.test_implicitly()wait.test_webdreiverwait()
【常见问题】:运行脚本报empty suite:
from selenium importwebdriverfrom time import sleepclass TestWait(object):def __init__(self):self.driver = webdriver.Chrome()self.driver.get('http://www.baidu.com') def test_sleep(self):self.driver.find_element_by_id("kw").send_keys("sleep test")# sleep(2) #等待固定时间self.driver.implicitly_wait(2)# 隐式等待self.driver.find_element_by_id("su").click()self.driver.quit()if __name__ == '__main__':wait=TestWait()wait.test_sleep()
文章图片
【解决方法】:脚本修改
from selenium import webdriverfrom time import sleepfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait class TestCase(object): def setup(self):self.driver = webdriver.Chrome()self.driver.get('http://www.baidu.com')# sleep(2) def test_sleep(self):self.driver.find_element_by_id('kw').send_keys('selenium')# sleep(2) # 线程阻塞 blocking waitself.driver.find_element_by_id('su').click()# sleep(3)def test_implicitly(self):self.driver.implicitly_wait(10)self.driver.find_element_by_id('kw').send_keys('selenium')# sleep(2) # 线程阻塞 blocking waitself.driver.find_element_by_id('su').click()# sleep(3) def test_wait(self):wait = WebDriverWait(self.driver,2)wait.until(EC.title_is('百度一下,你就知道'))self.driver.find_element_by_id('kw').send_keys('selenium')# sleep(2) # 线程阻塞 blocking waitself.driver.find_element_by_id('su').click()# sleep(3)def teardown(self):self.driver.quit() if __name__ == '__main__':case = TestCase()# case.test_sleep()# case.test_implicitly()case.test_wait()
以上:极客时间课程:selenium自动化测试学习总结!
以上就是python自动化测试selenium核心技术三种等待方式详解的详细内容,更多关于selenium三种等待方式的资料请关注脚本之家其它相关文章!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- 人脸识别|【人脸识别系列】| 实现自动化妆
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)