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

 更新时间:2021年11月13日 11:10:07   作者:aovenus  
这篇文章主要为大家介绍了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三种等待方式的资料请关注脚本之家其它相关文章!

相关文章

  • numpy如何处理Nan和inf

    numpy如何处理Nan和inf

    numpy是一个强大的科学计算库,在处理数据时经常会遇到NaN(不是数字)和Inf(无穷大)的情况,排序可以帮助我们查看这些特殊值的分布,使用np.isnan()函数可以生成一个布尔数组,用于判断哪些是NaN值,而np.isinf()函数则用于检测Inf值
    2024-09-09
  • Python爬虫基础之requestes模块

    Python爬虫基础之requestes模块

    这篇文章主要介绍了Python爬虫基础之requestes模块,文中有非常详细的代码示例,对正在学习python爬虫的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python实现Excel文件的合并(以新冠疫情数据为例)

    Python实现Excel文件的合并(以新冠疫情数据为例)

    这篇将以新冠疫情数据为例,详细介绍了如何利用Python实现合并Excel文件,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-03-03
  • python中装饰器级连的使用方法示例

    python中装饰器级连的使用方法示例

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,下面这篇文章主要给大家介绍了关于python中装饰器级连的使用方法,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-09-09
  • Python实现遍历windows所有窗口并输出窗口标题的方法

    Python实现遍历windows所有窗口并输出窗口标题的方法

    这篇文章主要介绍了Python实现遍历windows所有窗口并输出窗口标题的方法,涉及Python调用及遍历windows窗口句柄的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • python给list排序的简单方法

    python给list排序的简单方法

    在本篇文章里小编给大家整理的是一篇关于python给list排序的简单方法,有需要的朋友们可以学习参考下。
    2020-12-12
  • python如何利用paramiko执行服务器命令

    python如何利用paramiko执行服务器命令

    这篇文章主要介绍了python如何利用paramiko执行服务器命令,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • python 利用PyAutoGUI快速构建自动化操作脚本

    python 利用PyAutoGUI快速构建自动化操作脚本

    我们经常遇到需要进行大量重复操作的时候,比如:网页上填表,对 web 版本 OA 进行操作,自动化测试或者给新系统首次添加数据等,今天就利用PyAutoGUI构建自动化操作脚本完成这些重复的需求
    2021-05-05
  • 利用Python模拟登录pastebin.com的实现方法

    利用Python模拟登录pastebin.com的实现方法

    这篇文章主要介绍了利用Python模拟登录pastebin.com的实现方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • 使用Python进行Ping测试的操作指南

    使用Python进行Ping测试的操作指南

    在网络工程中,Ping测试是一种常用的网络诊断工具,用于检查网络连接的可达性和响应时间,随着Python编程语言的广泛应用,越来越多的网络工程师开始使用Python进行自动化网络测试和管理任务,本篇文章将详细介绍如何使用Python进行Ping测试,需要的朋友可以参考下
    2024-06-06

最新评论