selenium 隐式等待、显示等待

摘要:
Fromselenium importwebdriver#显示等待-从selenium提供等待条件。webdriver。supportimportedexpected_Conditionsasec#显示等待-显示selenium中的等待类。webdriver。支持uiimportWebDriverWait#显示selenium的等待。webdriver。常见的比姆牌手表
from selenium import webdriver
# 显示等待-提供等待条件
from selenium.webdriver.support import expected_conditions as ec
# 显示等待-显示等待类
from selenium.webdriver.support.ui import WebDriverWait
# 显示等待
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 隐式等待,设置一个超时时间,在这个时间内,不断的寻找元素,超时找不到就抛出异常
# 隐形等待10秒
# driver.implicitly_wait(10)
"""
一次声明,终生有效--对其后执行的每一行元素定位都有效
所以,通常在创建driver之后就声明了。
执行逻辑:
       当前代码执行元素定位操作的时候,若找得到元素,则继续执行
       若找不到元素,则等待0.5秒,然后再找一次,若还是找不到,则又等0.5秒再找
       如此循环,知道找到元素,若找到元素,则继续执行代码
       若达到超时时间,还是不能找到元素,则抛出timeout异常
隐式等待,需页面全部加载完成再执行,相对浪费时间(页面虽然加载完成了,但是不代表所有元素都出现了
"""
driver.get("http://127.0.0.1:8088/login")
driver.find_element_by_name("username").send_keys("libai")
driver.find_element_by_name("password").send_keys("opmsopms123")
driver.find_element_by_class_name("btn-login").click()
# 如果代码中存在大量的强制等待,会导致脚本无意义的拉长执行时间
# time.sleep(3)
# 可以用智能等待来解决这个问题

# 显示等待:设置一个超时时间和一个元素查找条件,在这个时间内,不断寻找元素,超时找不到就会报错
"""
不需要页面全部加载完成,相对节省时间
只对申明了显示等待的元素生效
"""
# 代码量多,且括号多,容易出错,写显示等待代码的时候,多多注意检查
# 每隔1秒 检查一次,最多等待10秒(最大超时时间)
ele = WebDriverWait(driver, 10, 1).until(
    #  visibility_of_element_located()里面传一个参数,所以里面的参数需要再加一个()
    ec.visibility_of_element_located(
        (
        By.CSS_SELECTOR, "body > section > div.left-side.sticky-left-side > div.left-side-inner > ul > li:nth-child(2)")
    )
)
# 显示等待这一大段,最终就会返回你想寻找的元素(若超时找不到,也会报timeout异常)
"""
申明一个隐式等待,全局通用
对于一些加载特别缓慢的元素,设置显示等待,适当为其增加等待时间
当显示等待与隐式等待同时出现的时候,取时间更多的一个生效
"""
ele.click()

免责声明:文章转载自《selenium 隐式等待、显示等待》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos下安装Ansys 17.2的全部过程shell命令三剑客之sed命令详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt程序的字符编码方式

本节会创建一个图形界面 Qt 程序,并故意对源文件使用不恰当的字符编码方式,导致其文本显示控件的汉字乱码。我们会介绍两种纠正方法: 第一种是不修改源代码文件编码格式,通过 QString::fromLocal8Bit() 函数在程序运行时转码; 第二种是直接将源代码文件整体转换成 UTF-8 编码,就不需要修改具体的代码行了。 第二种是最为推荐的方式,...

jquery读取iframe子页面和父页面的处理

1. jquery 在iframe子页面获取父页面元素代码如下: $("#objid", parent.document) 2. jquery在父页面 获取iframe子页面的元素 代码如下: $("#objid",document.frames('iframename').document) 3.js 在iframe子页面获取父页面元素代码如下: ind...

python实现websocket

# websocket实现原理 ''' 1.服务端开启socket,监听ip和端口 2.客户端发送连接请求(带上ip和端口) 3.服务端允许连接 4.客户端生成一个随机字符串,和magic string组合进行一个sha1加密,加密。并将随机字符串发送给服务端 5.然后服务端也要用相同的方式进行加密。 6.然后服务端将加密之后的密串返回给客户...

.NetCore WebAPI初尝试和部署IIS

.NetCore已经相当熟悉了,在此做一个简单的demo尝试,方便帮助新学习的朋友的,顺便也记录下有些小坑,废话不多说直接上代码,(顺便说下小demo结合了sqlsugar ORM框架从数据库获取了数据) 1、新建一个.net core WebAPI项目 2、可直接运行,结果如下 3、接下来我们新建一个API,命名ReplenishLrControll...

键盘输入、鼠标输入、焦点处理

一、键盘类和键盘事件 WPF提供了基础的键盘类(System.Input.Keyboard类),该类提供与键盘相关的事件、方法和属性,这些事件、方法和属性提供有关键盘状态的信息。Keyboard的事件也通过UIElement等XAML基元素类的事件向外提供。 对于键盘操作,其常用的事件有两组: KeyDown事件和PreviewKeyDown事件:处理键...

HTTP.SYS 远程执行代码漏洞分析(MS15-034 )

  在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows、Internet Explorer、Office、.NET Framework、Server软件、Office Services和Web Apps中存在的26个安全漏洞。其中就修复了HTTP.sys 中一处允许远程执行代码漏洞,编号为:CVE-2015...