这里写目录标题
一、强制等待
在web自动化测试中,有时候为了提高效率,要避免使用强制等待
使用场合:1、调试代码的时候;2、文件上传(系统的上传界面)
time.sleep(6)
import time
from selenium import webdriver
driver=webdriver.Chrome() driver谷歌浏览器对象
driver.get('http://www.sogou.com') 打开搜狗浏览器
#定位到输入框,输入nba
driver.find_element_by_xpath('//input[@maxlength="100"]').send_keys('nba')
#定位到搜狗搜索按钮,点击搜狗搜索
driver.find_element_by_xpath('//input[@value="搜狗搜索"]').click()
#需要休眠一下
time.sleep(2)
driver.find_element_by_xpath('//p[@class="title-summary "]').click()
为什么找不见元素?
因为确实没有这个元素,点击搜狗搜索后,页面处于加载中,而代码执行完点击搜索后,会立即执行下一行代码,所以元素没有找到
需要休眠一下
time.sleep(2)
二、隐形等待
强制等待的问题:1、不确定页面的加载时间,可能会因为等待时间过长,影响用例的执行效率
强制等待的问题:2、不确定页面的加载时间,可能会因为等待时间过短,导致代码依然有问题
使用方法:在代码一开始运行的时候,就添加隐式等待的配置,注意:隐式等待全局生效,
所有的find_element动作执行之前就执行此代码
隐式等待只能解决元素查找的问题,不能解决元素交互的问题
1、只需要在打开浏览器的时候,设置隐形等待的超时时间,之后就不需要设置第二次,全局生效
2、如果隐形等待时间设置为10,driver.implicitly_wait(10):每次查找元素的时候,都有10s的时间去等待某个元素出现
3、打开浏览器马上加上隐形等待,养成习惯
4、局限性:对某些个元素的状态无法判断
from selenium import webdriver
driver=webdriver.Chrome() driver谷歌浏览器对象
#设置隐形等待时间
driver.implicitly_wait(10)
#打开搜狗搜索
driver.get('http://www.sogou.com')
#定位到输入框,输入nba
driver.find_element_by_xpath('//input[@name="query"]').send_keys('NBA')
#定位到搜狗搜索按钮,点击butten
driver.find_element_by_xpath('//input[@type="submit"]').click()
#定位title,点击title
driver.find_element_by_xpath('//p[@class="title-summary "]').click()
#打印当前页面
print(driver.current_url)
设置隐形等待时间,时间是全局生效的,每个元素都需要等待10s
driver.implicitly_wait(10)
为什么不设置成6000s,因为当元素不存在的时候,会真的会等待6000s
三、显性等待
问题:元素可以找到,但是点击效果却没有触发
原因:页面元素加载是异步加载过程,通常html会先加载,js和css后加载
隐式等待只关注元素能不能找到,不关注元素能否点击或者其他的交互
第一个参数是driver
第二个参数最长等待时长
第三个参数是轮询时间
调用 until方法需要结合expected_conditions或者自己封装的方法进行使用
expected_conditions的参数传入的都是一个元组
def wait_show():
driver.get('https://vip.ceshiren.com/#/ui_study/')
wait=WebDriverWait(driver,timeout=10,poll_frequency=0.5)
wait.until(expected_conditions.element_to_be_clickable((By.ID,'success_btn'))).click()
from selenium import webdriver
#显性等待路径
from selenium.webdriver.support.wait import WebDriverWait
#内置条件放在那
from selenium.webdriver.support import expected_conditions
driver=webdriver.Chrome() driver谷歌浏览器对象
driver.implicitly_wait(10)
#打开搜狗搜索
driver.get('http://www.sogou.com')
#定位到输入框,输入nba
driver.find_element_by_xpath('//input[@type="text"]').send_keys('nba')
#定位到搜狗搜索butten,点击
driver.find_element_by_xpath('//input[@value="搜狗搜索"]').click()
wait=WebDriverWait(driver,10,poll_frequency=0.2)
locator=('xpath','//p[@class="title-summary "]')
el=wait.until(expected_conditions.presence_of_element_located(locator))
el.click()
print('hello world')
print(driver.current_url)
四、显性等待具体操作
显性等待路径
from selenium.webdriver.support.wait import WebDriverWait
内置条件放在那?
from selenium.webdriver.support import expected_conditions
1、初始化一个等待器,需要传3个参数
driver
timeout
poll_frequency
wait=WebDriverWait(driver,10,poll_frequency=0.2)
2、等待某个条件的发生,返回ture、false
导入条件可以自己定义,通常可以选用内置条件
3、准备元素的定位表达式
locator=(‘xpath’,‘//p[@class="title-summary "]’)
el=wait.until(expected_conditions.presence_of_element_located(locator))
el.click()