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)