[-003-]-Python3+Unittest+Selenium Web UI自动化测试之显示等待WebDriverWait
1、WebDriverWait基本用法
引入包
# 文件引入 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
每0.5s定位ID为userid的元素,如果定位成功,执行下面的代码;直至15s超时抛出异常 可用来检查页面元素是否加载完成
# 每0.5s定位ID为userid的元素,如果定位成功,执行下面的代码;直至15s超时抛出异常 # 可用来检查页面元素是否加载完成 WebDriverWait(driver, 15, 0.5).until(EC.presence_of_element_located(By.ID, "id"))
until中为条件,直到条件实现,等待结束,否则抛出异常
presence_of_element_located(locator):等待元素出现在DOM中,例如(By.ID,"id")、(By.NAME,"name") visibility_of_element_located(locator):等待元素在页面中可见,即它不仅存在于DOM中,而且还在视觉上可见 element_to_be_clickable(locator):等待元素可以被点击 text_to_be_present_in_element(locator, text):等待元素中包含特定的文本
2、显示等待高级用法
2.1 alert_is_present():判断页面是否出现alert框
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions #alert_is_present():判断页面是否出现alert框 res = WebDriverWait(driver,10).until(expected_conditions.alert_is_present()) print(res.text)
2.2 element_located_selection_state_to_be(locator,state):判断一个元素的状态是否是给定的选择状态
第一个传入参数是一个定位器,定位器是一个元组(by,path);第二个传入参数表示期望的元素状态,True表示选中状态,Flase表示未选中
# element_located_selection_state_to_be():判断一个元素的状态是否是给定的选择状态 res = WebDriverWait(driver,10).until(expected_conditions.element_located_selection_state_to_be((By.ID,'id'),True))
2.3 element_selection_state_to_be(driverObject,state):判断给定的元素是否被选中
第一个传入参数是一个webdriver对象,第二个参数是期望的元素的状态,True表示选中状态,Flase表示未选中
# element_selection_state_to_be():判断给定的元素是否被选中 res = WebDriverWait(driver,10).until(expected_conditions.element_selection_state_to_be((driver.find_element_by_id('id')),True))
2.4 element_located_to_be_selected(locator):期望某个元素处于被选中状态
参数传入的是一个定位器
#element_located_to_be_selected():期望某个元素处于被选中状态 res = WebDriverWait(driver,10).until(expected_conditions.element_located_to_be_selected((By.ID,'id')))
2.5 element_to_be_selected():期望某个元素处于选中状态
传入参数是一个webdriver实例对象
#element_to_be_selected():期望某个元素处于选中状态 res=WebDriverWait(driver,10).until(expected_conditions.element_to_be_selected(driver.find_element_by_id('id')))
2.6 element_to_be_clickable():判断元素是否可见并且能被单击,条件满足返回页面元素对象,否则返回Flase
#element_to_be_clickable():判断元素是否可见并且能被单击,条件满足返回页面元素对象,否则返回Flase res=WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable(driver.find_element_by_id('id')))
2.7 frame_to_be_available_and_switch_to_it(parm):判断frame是否可用
如果可用返回True并切入到该frame,参数parm可以是定位器locator(by,path)组成的元组,或者定位方式:id、name、index(frame在页面上索引号),或者webelement对象
#frame_to_be_available_and_switch_to_it():判断frame是否可用 #传入ID值‘id’ res1=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(By.ID,'id')) #传入frame的webelement对象 res2=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_id('id'))) #传入frame在页面中索引号 res3=WebDriverWait(driver,10,0.2).until(EC.frame_to_be_available_and_switch_to_it(1))
2.8 invisibility_of_element_located(*locator*):希望某个元素不可见或者不存在DOM中
满足条件返回True,否则返回定位到的元素对象
#invisibility_of_element_located():希望某个元素不可见或者不存在DOM中,满足条件返回True,否则返回定位到的元素对象 res=WebDriverWait(driver,15,0.5).until(EC.invisibility_of_element_located(By.ID,'id'))
2.9 presence_of_all_elements_located(*locator*):判断页面至少有一个如果元素出现,如果满足条件,返回所有满足定位表达式的页面元素
#presence_of_all_elements_located():判断页面至少有一个如果元素出现,如果满足条件,返回所有满足定位表达式的压面元素 res=WebDriverWait(driver,10,0.2).until(EC.presence_of_all_elements_located(By.ID,'id'))
2.10 presence_of_element_located(locator):判断某个元素是否存在DOM中,不一定可见,存在返回该元素对象
#presence_of_element_located():判断某个元素是否存在DOM中,不一定可见,存在返回该元素对象 res=WebDriverWait(driver,10,0.2).until(EC.presence_of_element_located(By.ID,'id'))
2.11 staleness_of(webelement):判断一个元素是否仍在DOM中,如果在规定时间内已经移除返回True,否则返回Flase
#staleness_of():判断一个元素是否仍在DOM中,如果在规定时间内已经移除返回True,否则返回Flase res=WebDriverWait(driver,10,0.2).until(EC.staleness_of(driver.find_element_by_id('id')))
2.12 text_to_be_present_in_element():判断文本内容test是否出现在某个元素中,判断的是元素的text
#text_to_be_present_in_element():判断文本内容是否出现在某个元素中,判断的是元素的text res=WebDriverWait(driver,15,0.5).until(EC.text_to_be_present_in_element(By.TAG_NAME,"text"))
2.13 text_to_be_present_in_element_value():判断text是否出现在元素的value属性值中
#text_to_be_present_in_element_value():判断text是否出现在元素的value属性值中 res=WebDriverWait(driver,10,0.2).until(EC.text_to_be_present_in_element_value((By.ID,'id'),'姓名'))
2.14 title_contains():判断页面title标签的内容包含partial_title,只需要部分匹配即可
#title_contains():判断页面title标签的内容包含partial_title,只需要部分匹配即可,包含返回True,不包含返回Flase res=WebDriverWait(driver,10,0.2).until(EC.title_contains("姓名"))
2.16 title_is():判断页面title内容是与传入的title_text内容完全匹配
#title_is():判断页面title内容是与传入的title_text内容完全匹配,匹配返回True,否则返回Flase res=WebDriverWait(driver,10,0.2).until(EC.title_is("姓名"))