python—web页面操作之3种等待方式(更新)

一、强制等待

在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(
)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值