Python selenium的这三种等待方式一定要会!

一、为什么要使用等待?

在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时

时间,大致在1-3秒

如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行

我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败

二、常用的三种等待方式

  • 强制等待
  • 隐式等待
  • 显示等待

三、强制等待

利用time模块的sleep方法来实现,最简单粗暴的等待方法

强制等待,不管你浏览器是否加载完成,都得给我等待3秒,3秒一到,继续执行下面的代码

# -*- coding: utf-8 -*-
# @Author : 程序员一凡
import time
from selenium import webdriver
driver = webdriver.Chrome()
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 强制等待3秒
time.sleep(3)
driver.find_element_by_css_selector("#kw").send_keys("selenium")
# 退出
driver.quit()

弊端

不建议用这种等待方法,严重影响代码的执行速度

四、隐式等待

implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完)网页加载

完成则执行下一步

隐式等待只需要声明一次,一般在打开浏览器后进行声明

声明之后对整个drvier的生命周期都有效,后面不用重复声明

# -*- coding: utf-8 -*-
# @Author : 程序员一凡
import time
from selenium import webdriver
driver = webdriver.Chrome()
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 隐性等待5秒
driver.implicitly_wait(5)
driver.find_element_by_css_selector("#kw").send_keys("selenium")
# 退出
driver.quit()

弊端

程序会一直等待整个页面加载完成,直到超时

有时候我需要的那个元素早就加载完成了,只是页面上有个别其他元素加载特别慢,我仍要等待页

面全部加载完成才能执行下一步

五、显示等待

WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了

它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步

否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

显示等待必须在每个需要等待的元素前面进行声明

# 导入模块
from selenium.webdriver.support.wait import WebDriverWait

四个参数

driver:浏览器驱动

timeout:等待时间

poll_frequency:检测的间隔时间,默认0.5s

ignored_exceptions:超时后的异常信息,默认抛出NoSuchElementException

expected_conditions

expected_conditions是selenium的一个模块

包含一系列可用于判断的条件

可以对网页上元素是否存在,可点击等等进行判断,一般用于断言或与WebDriverWait配合使用

from selenium.webdriver.support import expected_conditions as EC
# -*- coding: utf-8 -*-
# @Author : 程序员一凡
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 等待10s,等待过程中如果定位到元素,就直接执行后续的代码,反之等待10s后报错误信息
# 验证元素是否出现,传入的参数都是元组类型的locator,如(By.ID, ‘kw')
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID,
"kw"))).send_keys("好好学习")

六、模块用法汇总

#判断当前页面的title是否精确等于预期,返回布尔值
WebDriverWait(driver,10).until(EC.title_is("百度一下,你就知道"))
#判断当前页面的title是否包含预期字符串,返回布尔值
WebDriverWait(driver,10).until(EC.title_contains('new'))
#判断当前页面的url是否精确等于预期,返回布尔值
WebDriverWait(driver,10).until(EC.url_contains('https://www.baidu.com'))
#判断当前页面的url是否包含预期字符串,返回布尔值
WebDriverWait(driver,10).until(EC.url_contains('baidu'))
#判断当前页面的url是否满足字符串正则表达式匹配,返回布尔值
WebDriverWait(driver,10).until(EC.url_matches('.+baidu.+'))
#判断元素是否出现,只要有一个元素出现,返回元素对象
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
#判断元素是否可见,返回元素对象
WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(By.ID,'kw'))
)
#判断元素是否包含指定文本,返回布尔值
WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.NAME,'tj_trn
ews'),'新闻'))
#判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去
WebDriverWait(driver,10,).until(EC.frame_to_be_available_and_switch_to_it(By.xpa
th,'//iframe'))
#判断某个元素是否可见并且是可点击的,如果是的就返回这个元素,否则返回False
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,'tj_trnews'))
)
#判断某个元素是否被选中,一般用在下拉列表
WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.
xpath,'//input[@type="checkbox"]')))
#判断页面上是否存在alert,如果有就切换到alert并返回alert的内容
WebDriverWait(driver,10).until(EC.alert_is_present())

到此这篇关于Python selenium的这三种等待方式一定要会!的文章就介绍到这了,更多相关selenium等待方式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

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

  • Python爬虫基础初探selenium

    Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space.bilibili.com/523606542 Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,就像玩游戏用的按键精灵,可以按指定的命令自动操作. Selenium测试工具直接操控浏览器中,就像真正的用户在操作一样.Selenium可以根据的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生等. selenium的用途 (

  • Python selenium 三种等待方式解读

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

  • Python爬虫实战之用selenium爬取某旅游网站

    一.selenium实战 这里我们只会用到很少的selenium语法,我这里就不补充别的用法了,以实战为目的 二.打开艺龙网 可以直接点击这里进入:艺龙网 这里是主页 三.精确目标 我们的目标是,鹤壁市,所以我们应该先点击搜索框,然后把北京删掉,替换成鹤壁市,那么怎么通过selenium实现呢? 打开pycharm,新建一个叫做艺龙网的py文件,先导包: from selenium import webdriver import time # 导包 driver = webdriver.Chro

  • 教你如何使用Python selenium

    一.了解selenium Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safar等浏览器(需要下载驱动),之前是用来做测试网站的,后来发现也可以用来爬取数据(估计开发者都没想到他开发的selenium被别人广泛适用于爬虫领域--笑). 二.selenium的下载 1.我这里是使用的Chrom浏览器 !注意不要忽视这个地方 2.python中selenium库的下载(pycharm系列) 由于我用的pycharm的虚拟环境,所以我只需要在py

  • 教你怎么用python selenium实现自动化测试

    一.安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回放功能,IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本,下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ 如何

  • Python selenium的这三种等待方式一定要会!

    一.为什么要使用等待? 在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时 时间,大致在1-3秒 如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行 我们可以通过在脚本中设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败 二.常用的三种等待方式 强制等待 隐式等待 显示等待 三.强制等待 利用time模块的sleep方法来实现,最简单粗暴的等待方法 强制等待,不管你浏览器是否加载完成,都得给我等待3秒,3秒一到,继续执行下面的代码 #

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

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

  • Selenium 三种等待方式(强制等待、隐式等待、显示等待)

    1.强制等待(sleep) from time import sleep sleep(3) # 强制等待3秒 缺点:由于Web加载的速度取决于测试的硬件.网速.服务器的响应时间等因素.如果等待时间太长,容易造成时间浪费,如果等待时间太短又可能会造成在web还没有加载完所需要定位的element,而出现报错.由于等待时间无法确定,使用太多的sleep会影响运行速度,大大地降低效率,所以建议测试中尽量少使用强制等待. 2.隐式等待 ( implicitly_wait) # 隐式等待10s drive

  • 对python For 循环的三种遍历方式解析

    实例如下所示: array = ["a","b","c"] for item in array: print(item) for index in range(len(array)): print(str(index)+".."+array[index]) for index,val in enumerate(array): print(str(index)+"--"+val); 打印结果 a b c 0.

  • Python编程入门之Hello World的三种实现方式

    本文实例讲述了Python编程入门之Hello World的三种实现方式.分享给大家供大家参考,具体如下: 第一种方式: $python >>>print('hello world') 屏幕上输出hello world print是一个常用函数 第二种方式: 复制代码 代码如下: $python hello.py 第三种方式: #!/usr/bin/env python chmod 755 hello.py ./hello.py 希望本文所述对大家Python程序设计有所帮助.

  • Python实现定时执行任务的三种方式简单示例

    本文实例讲述了Python实现定时执行任务的三种方式.分享给大家供大家参考,具体如下: 1.定时任务代码 #!/user/bin/env python # @Time :2018/6/7 16:31 # @Author :PGIDYSQ #@File :PerformTaskTimer.py #定时执行任务命令 import time,os,sched schedule = sched.scheduler(time.time,time.sleep) def perform_command(cmd

  • 详解Python发送email的三种方式

    Python发送email的三种方式,分别为使用登录邮件服务器.使用smtp服务.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sendmail命令来发送,还可以使用本地或者是远程的smtp服务来发送邮件,不管是单个,群发,还是抄送都比较容易实现.本米扑博客先介绍几个最简单的发送邮件方式记录下,像html邮件,附件等也是支持的,需要时查文档即可. 一.登录邮件服务器 通过smtp登录第三方smtp邮箱发送邮件,支

  • python反转列表的三种方式解析

    这篇文章主要介绍了python反转列表的三种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.内建函数reversed() li =[1, 2, 3, 4, 5, 6] a = list(reversed(li)) print (a) 注意:reversed()函数返回的是一个迭代器,而不是一个List,所以需要list函数转换一下 2.内建函数sorted() sorted()语法 sorted(iterable[, cmp[, k

随机推荐