[-003-]-Python3+Unittest+Selenium Web UI自动化测试之显示等待WebDriverWait

发布时间 2023-07-05 11:38:15作者: 旅行没有终点

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("姓名"))