selenium 设置等待时间

有些网站打开地址或者进行操作后,页面需要加载几秒钟,或者等待某一元素加载完成后再继续下一步操作,这里就需要进行设置等待时间

导入time模块,time模块是python自带的,无需下载


一、设置等待时间有三种方法:

1、强制等待

time.sleep(time)     # 强制等待3秒后,进行下一步操作,也可以是小数,单位为秒 

 

缺点:不能准确把握需要等待的时间(有时候操作未完成,等待就结束了,导致报错;有时候操作已经完成了,但时间还没到,浪费时间),如果再用例中大量使用,会浪费不必要的等待时间,影响用例的执行效率。

优点:使用简单,可以在调试时使用。

 

2、隐式等待 

driver.implicitly_wait(X),在X时间内,页面加载完成,进行下一步操作。

缺点:使用隐式等待,程序会一直等待页面加载完成,才会执行下一步操作

(有时候页面想要的元素早已加载完成了,但是页面上个别元素还没有加载完成,仍要等待页面全部完成才能执行下一步,使用 也不是很灵活)

优点:隐式等待对整个driver的周期都起作用,所以只要设置一次即可

3、显示等待 

from selenium.webdriver.support.wait import WebDriverWait 

 WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)

 

优点:使用相对比较复杂

缺点:等地啊判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率

 

 示例:打开登录页面,以登录按钮为页面加载成功的标志,如果20秒内,定位到登录按钮,就进行登录操作,不再继续等待,如果20秒内还没定位到登录按钮,下一步操作就会报错,并抛出异常。 

from selenium import webdriver

import time 

from selenium.webdriver.support.wait import WebDriverWait 

from selenium.webdriver.support import expect_conditions as EC

  from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("http://www.baidu.com/) 

# 加载等等,等待加载页面,根据目标页面特征元素进行判断

 locatorLogin = (By.TAG_NAME,"button")

try:

WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located(locatorLogin)) 

print("登录页面加载出来啦") 

except:

print("页面加载失败") 

 

# 页面加载完成后,进行用例的相应操作

ownerSite = driver.find_element_by_id("ownerSite")

ownerSite.clear()

ownerSite.click()

ownerSite.send_keys(u"今天星期几") 

  ......

......

 

二、WebDriverWait类

1、until() 

until()方法:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常。 

 

2、until_not()

until_not()方法:直到条件不成立返回为真,是当某元素消失或什么条件不成立则继续执行,等待结束。如果超时,抛出TimeoutException,将message传入异常。 

 

3、excepted_conditions异常处理模块

expected_conditions是selenium的一个模块,其中包含一系列可用于判断的条件方法。 

 

 三、WebDriverWait自带的方法

is_displayed():判断元素是否被展示出来

is_enable():判断元素是否可操作

is_select():判断元素是否被选择 

 

posted @ 2019-04-04 23:09  DeyouKong  阅读(6532)  评论(0编辑  收藏  举报