A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我是楠楠 黑马粉丝团   /  2019-9-11 16:07  /  1306 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

【郑州校区】元素等待
目标
1. 掌握元素的隐式等待
2. 掌握元素的显式等待
1. 元素等待
1.1 什么是元素等待?
概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程;
1.1 为什么要设置元素等待?
1. 网络速度慢
2. 电脑配置低
3. 服务器处理请求慢

Selenium中元素等待有几种类型呢?
1.1 元素等待类型
1. 隐式等待
2. 显式等待
1. 隐式等待
概念:定位元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该元素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出元素不存在的异常  NoSuchElementException  。

1.1 实现方式
方法:driver.implicitly_wait(timeout)
(timeout:为等待最大时长,单位:秒)

说明:隐式等待为全局设置(只需要设置一次,就会作用于所有元素)
1.1 案例
需求:打开注册A页面,完成以下操作
1).使用隐式等待定位用户名输入框,如果元素存在,就输入admin
1. 显式等待
概念:定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该元素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出超时异常  TimeoutException  。
在Selenium中把显式等待的相关方法封装在WebDriverWait类中
实现方式
1. 导包  等待类    -->  from  selenium.webdriver.support.wait  import  WebDriverWait
2. WebDriverWait(driver,  timeout,  poll_frequency=0.5) 1).  driver:浏览器驱动对象
2). timeout:超时的时长,单位:秒
3). poll_frequency:检测间隔时间,默认为0.5秒
3. 调用方法  until(method):直到...时
1). method:函数名称,该函数用来实现对元素的定位
2). 一般使用匿名函数来实现:lambda  x:  x.find_element_by_id("userA")
4.  element  =  WebDriverWait(driver,  10,  1).until(lambda  x:  x.find_element_by_id("userA")
)
案例
需求:打开注册A页面,完成以下操作
1).使用显式等待定位用户名输入框,如果元素存在,就输入admin
1.1 示例代码
import  time
from  selenium  import  webdriver
from  selenium.webdriver.support.wait  import  WebDriverWait

driver  =  webdriver.Firefox()
driver.get("file:///D:/webAutoTest/page/注册A.html")

element  =  WebDriverWait(driver,  10,  1).until(lambda  x:  x.find_element_by_id("userA")) element.send_keys("admin")

time.sleep(3) driver.quit()
1. 显式与隐式区别
1. 作用域:隐式为全局元素,显式等待为单个元素有效
2. 使用方法:隐式等待直接通过驱动对象调用,而显式等待方法封装在WebDriverWait类中
3. 达到最大超时时长后抛出的异常不同:隐式为NoSuchElementException,显式等待为TimeoutExcepti
on
元素等待-总结
1. 为什么要设置元素等待
2. 元素等待的过程
3. 元素等待的类型
4. 显式等待与隐式等待区别

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马