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

作者:aovenus 时间:2023-09-16 09:06:04 

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)

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

两种方法:until和util_not

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

场景:

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

示例脚本:


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()

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

【解决方法】:脚本修改


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自动化测试学习总结!

来源:https://blog.csdn.net/aovenus/article/details/121192001

标签:python,自动化测试,selenium,等待方式
0
投稿

猜你喜欢

  • 非原型 不设计

    2010-01-21 12:51:00
  • fckeditor 常用函数

    2023-01-25 15:47:11
  • 关于设计的六个误会

    2008-06-26 18:18:00
  • Python 统计数据集标签的类别及数目操作

    2023-04-08 12:04:09
  • 关于Ajax responseText 中文乱码问题

    2008-02-12 16:30:00
  • 如何使用yolov5输出检测到的目标坐标信息

    2021-07-12 17:25:14
  • 浅谈如何使用Python控制手机(二)

    2022-05-01 20:16:28
  • vue实现全屏滚动效果(非fullpage.js)

    2024-05-28 15:46:00
  • Pandas数据分析-pandas数据框的多层索引

    2022-11-27 22:25:37
  • MySQL 5.5的max_allowed_packet属性的修改方法

    2024-01-19 05:21:02
  • 深入解析Go语言编程中slice切片结构

    2024-04-25 15:01:23
  • 深入理解python try异常处理机制

    2023-01-06 00:51:35
  • 在keras中对单一输入图像进行预测并返回预测结果操作

    2023-03-10 10:07:04
  • 简单介绍Python中用于求最小值的min()方法

    2021-05-27 23:00:11
  • python绘制立方体的方法

    2022-09-26 10:34:14
  • JS模拟实现京东快递单号查询

    2024-04-18 09:45:44
  • PHP排序二叉树基本功能实现方法示例

    2023-07-10 04:45:53
  • PHP的mysqli_stat()函数讲解

    2023-06-12 08:11:33
  • 盘点网络编程必须要知道的基础知识

    2022-05-27 22:06:16
  • Pytorch中实现只导入部分模型参数的方式

    2023-01-24 05:53:25
  • asp之家 网络编程 m.aspxhome.com