我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python自动化测试selenium核心技术三种等待方式详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python自动化测试selenium核心技术三种等待方式详解

UI自动化测试过程中,可能会出现因测试环境不稳定、网络慢等情况,如果不做任何处理的话,会出现无法定位到特定元素而报错,导致自动化测试无法顺利执行。

selenium官网手册:Waits | Selenium

slenium自动化测试中,主要涉及三种等待方式:    

1 使用python自带模块time的sleep方式     

缺点:即使网络条件较好时,依旧按照预定固定时间等待,一般不建议使用,脚本调试可使用。

示例脚本:


from selenium import  webdriver
from 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")
        # 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 import  webdriver
from 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 WebDriverWait

WebDriverWait参数说明:

WebDriverWait(driver, timeout=3).until(some_condition)

两种方法:until和util_not

场景:

打开百度首页,等待页面标题出现:百度一下,你就知道,再执行输入搜索关键词,点击“百度一下”按钮。

示例脚本:


from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class 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 webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class 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 import  webdriver
from time import sleep
class 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 webdriver
from time import sleep
from selenium.webdriver.support import expected_conditions as EC
from 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 wait
        self.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 wait
        self.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 wait
        self.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三种等待方式的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python自动化测试selenium核心技术三种等待方式详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python自动化测试selenium核心技术的等待方式有哪些

小编给大家分享一下python自动化测试selenium核心技术的等待方式有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!UI自动化测试过程中,可能会出现因测试环境不稳定、网络慢等情况,如果不做任何处理的话,会出现无法
2023-06-25

python自动化测试selenium核心技术等待条件有哪些

这篇文章主要介绍python自动化测试selenium核心技术等待条件有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Selenium中的鼠标和键盘事件被封装在ActionChains类中,使用方法:Action
2023-06-25

python如何进行自动化测试selenium核心技术处理弹框

python如何进行自动化测试selenium核心技术处理弹框,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。页面上的弹框一般有三种:(1)alert:用来提示(2)confir
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录