目标 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. 显式等待与隐式等待区别
|