python-selenium -- 3种等待方式

一、等待 -- 3种等待方式

1.1 强制等待

#引入模块

import time

#某操作后 等待5s

time.sleep(5)

 

1.2 隐性等待

#隐式等待60s -- 全局可用

driver.implicitly_wait(60)

 

1.3 显性等待

明确等待某个条件满足之后,再去执行下一步操作。

程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

WebDriverWait(driver,等待时长,轮循周期默认0.5s).until/until_not(expected_conditions模块.方法)

expected_conditions期望的条件模块中提供了一系列的期望发生的条件,每个条件方法均是一个类

如:WebDriverWait(driver,20).until(EC.presence_of_element_located(locator))

 

实例1:直接定位元素

 1 #引入显性等待库
 2 
 3 from selenium.webdriver.support.wait import WebDriverWait
 5 from selenium.webdriver.support import expected_conditions as EC
 7 from selenium.webdriver.common.by import By
 8 
 9 #先确定元素定位表达式
10 
11 ele_locator = '//a[text()="_百度百科"'
12 
13 #元素定位方式--元组表达
14 
15 param = (By.XPATH,ele_locator)
16 
17 #WebDriverWait类(driver,等待时长,轮循周期).until(判断条件)
18 
19 #使用expected_conditions对应的方法生成判断条件 EC.方法名(定位方式,定位表达式)
20 
21 WebDriverWait(driver,20).until(EC.presence_of_element_located(param))

 

实例2:切入再定位元素-iframe

#方式1:直接使用Switch_to 切换到iframe
# driver.switch_to.frame("login_frame_qq")

 1 #方式2:使用显性等待方式
 2 #iframe的name属性定位
 3 ele_locator = 'login_frame_qq'
 4 param = (By.NAME,ele_locator)
 5 #判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
 6 WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(param))
 7 time.sleep(3)
 8 #点击账号密码登录
 9 driver.find_element_by_xpath('//a[@id="switcher_plogin"]').click()
10 time.sleep(2)

 

expected_conditions模块中常用方法:

title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值

title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值

presence_of_element_located : 判断某个元素是否被加到了dom树里,并不代表该元素一定可见

visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0

visibility_of : 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了

presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是‘column-md-3‘,那么只要有1个元素存在,这个方法就返回True

text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串

text_to_be_present_in_element_value : 判断某个元素中的value属性是否 包含 了预期的字符串

frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False

invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见

element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable

staleness_of : 等某个元素从dom树中移除,注意,这个方法也是返回True或False

element_to_be_selected : 判断某个元素是否被选中了,一般用在下拉列表

element_selection_state_to_be : 判断某个元素的选中状态是否符合预期

element_located_selection_state_to_be : 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator

alert_is_present : 判断页面上是否存在alert弹框

new_window_is_opened:新窗口打开,期望新窗口将被打开并拥有,增加窗口句柄

 

参考文档:http://www.bubuko.com/infodetail-1979606.html


 

seleium中各入参点区分

locator = '//span['xx']'

driver = webdriver.Chrome()

webelement = driver.find_element_by_xpath(locator)

 

posted @ 2018-06-28 14:38  雨彡  阅读(852)  评论(0编辑  收藏  举报