一、强制等待
在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、如果隐形等待时间设置为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
三、显性等待
等待元素出现
等待元素可以被点击
等待元素可见(已经加载出来,但是不可见)
用法
wait
wait.until()
locator
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()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/74335.html