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

目录
  • 1 使用python自带模块time的sleep方式
  • 2 隐式等待(implicitly_wait)
  • 3 显示等待(WebDriverWait)

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三种等待方式的资料请关注我们其它相关文章!

(0)

相关推荐

  • python自动化测试selenium执行js脚本实现示例

    WebDriver有2个方法执行Java Script脚本. (1)同步执行:execute_script (2)异步执行:execute_async_script from selenium import webdriver from time import sleep class TestScriptss(object): def setup(self): self.driver = webdriver.Chrome() self.driver.get(http://www.baidu.co

  • python自动化测试selenium核心技术等待条件教程

    Selenium中的鼠标和键盘事件被封装在ActionChains类中,使用方法: ActionChains(driver).click(btn).perform() ActionChains中常用方法: 示例网站:http://sahitest.com/demo 示例场景:打开Sahi Tests页面,点击"Alert Test"页面,鼠标点击页面中"Click For Alert"按钮,弹出警告提示框,判断页面是否存在alert,如存在则切换到警告框,并获取警告

  • Selenium执行JavaScript脚本的方法示例

    JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在Web页面中进行js交互.那么js能做的事,Selenium应该大部分也能做.WebDriver是模拟终端用户的交互,所以就不能点击不可见的元素,有时可见元素也不能点击.在这些情况下,我们就可以通过WebDriver 执行JavaScript来点击或者执行页面元素.本文将介绍如何使用 WebDriver

  • 使用Python+selenium实现第一个自动化测试脚本

    最近在学web自动化,记录一下学习过程. 此处我选用python3.6+selenium3.0,均用最新版本,以适应未来需求. 环境:windows10,64位 一.安装python python官方下载地址:https://www.python.org/downloads/ 进入页面就有两个版本的下载选择,2.x版本和3.x版本,或者根据系统选择对应版本. 点击Windows,跳转到Windows版本页面: 点选Python3.6.0版本,进入3.6版本页面,拉到页面下方,找到files 选择

  • python自动化测试selenium操作下拉列表实现

    处理下拉列表需要使用selenium中的工具类Select,常用方法如下: 示例网站:http://sahitest.com/demo 示例场景:打开Sahi Tests页面, (1)点击"Select Test"页面,鼠标点击页面中第一个下拉列表. 示例脚本: from selenium import webdriver from time import sleep from selenium.webdriver.support.select import Select class

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

    目录 1 使用python自带模块time的sleep方式 2 隐式等待(implicitly_wait) 3 显示等待(WebDriverWait) UI自动化测试过程中,可能会出现因测试环境不稳定.网络慢等情况,如果不做任何处理的话,会出现无法定位到特定元素而报错,导致自动化测试无法顺利执行. selenium官网手册:Waits | Selenium slenium自动化测试中,主要涉及三种等待方式: 1 使用python自带模块time的sleep方式 缺点:即使网络条件较好时,依旧按照

  • Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到-各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了. 那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽.说到等,又有三种等法,且听博主一一道来: 1. 强制等待

  • vue路由传参三种基本方式详解

    这篇文章主要介绍了vue路由传参三种基本方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据. 父组件中: <li v-for="article in articles" @click="getDescribe(article.id)"> methods: 方案一: getDescribe(id) { // 直接调用$r

  • Java spring的三种注入方式详解流程

    目录 设置Spring的作用域 自动注入 @Primary Qualifier @ComponentScan不同的配置对性能的影响 懒加载 三种注入方式 字段注入(IDEA 会提示不推荐) 字段注入的bean类外部不可见 循环依赖问题 构造器注入(官方推荐) set方法注入 设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUniqueBeanDefin

  • Spring中Bean的三种实例化方式详解

    目录 一.环境准备 二.构造方法实例化 三.分析Spring的错误信息 四.静态工厂实例化 4.1 工厂方式创建bean 4.2 静态工厂实例化 五.实例工厂与FactoryBean 5.1 环境准备 5.2 实例工厂实例化 5.3 FactoryBean的使用 六.bean实例化小结 一.环境准备 准备开发环境 创建一个Maven项目 pom.xml添加依赖 resources下添加spring的配置文件applicationContext.xml 最终项目的结构如下: 二.构造方法实例化 在

  • Django Rest framework三种分页方式详解

    前言 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来. 因为这样会给内存造成巨大的压力,很容易就会内存溢出,所以我们希望一点一点的取. 同样,展示的时候也是一样的,我们必定会对数据进行分页显示. 本文将详细讲述DRF为我们提供的三种分页方式. 全局配置 REST_FRAMEWORK = { # 对所有分页器生效,但优先级低 'PAGE_SIZE': 5, # 每页显示5条数据 } 我们先准备好用于测试分页的数据以及序列化类 数据表 from django.d

  • oracle中if/else的三种实现方式详解

    1.标准sql规范 1.单个IF IF v=... THEN END IF; 2.IF ... ELSE IF v=... THEN ELSE t....; END IF; 3.多个IF IF v=... THEN ELSIF v=... THEN t...; END IFL 注意: 多个IF的是'ELSIF' 不是 ' ELSE IF' 2.decode函数 DECODE(VALUE,IF1,THEN1,IF2,THEN2,IF2,THEN2,..,ELSE) 表示如果value等于if1时,

  • Spring Bean三种注入方式详解

    在Spring容器中为一个bean配置依赖注入有三种方式: 使用属性的setter方法注入  这是最常用的方式: 使用构造器注入: 使用Filed注入(用于注解方式). Field注入是最常见的一种方式,可以采用 @Autowired 对Bean类的接口进行初始化,代码如下 @ContextConfiguration({"/META-INF/spring/amazing-base.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public

  • Android编程中沉浸式状态栏的三种实现方式详解

    本文实例讲述了Android编程中沉浸式状态栏的三种实现方式.分享给大家供大家参考,具体如下: 沉浸式状态栏 Google从android kitkat(Android 4.4)开始,给我们开发者提供了一套能透明的系统ui样式给状态栏和导航栏,这样的话就不用向以前那样每天面对着黑乎乎的上下两条黑栏了,还可以调成跟Activity一样的样式,形成一个完整的主题,和IOS7.0以上系统一样了. 首先看下效果 首先看下第一种方式 系统的方式沉浸式状态栏实现 步奏一 //当系统版本为4.4或者4.4以上

  • iconfont的三种使用方式详解

    在我们项目中经常要使用到iconfont,在此我们使用阿里巴巴矢量库提供的icon图标,此图标库足够为我们提供大量的图标,我们首先需要的事在阿里巴巴矢量图标库新建一个自己的账号,并且新建一个项目,这个项目包含了你所有要用到的图标.我们需要选中需要的图标放到自己的项目中,并下载下来放到自己项目下的iconfont文件夹之下.(需要更新图标时,下载包也需要重新下载更新) 方式一:使用symbol方式(本质是用svg标签构成的) 第一步:为了代码更好的复用,我们封装一个svg-icon组件,代码如下:

随机推荐