前言
expected_conditions是selenium的一个模块,可以对网页上元素进行判断,一般配合WebDriverWait使用。
详细介绍说明
1、title_is,判断当前页面的标题是否等于预期,返回布尔值
也可以使用driver.title打印当前页面的标题
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')
# 判断当前页面的标题是否符合预期
# title = WebDriverWait(driver, 5).until(EC.title_is('百度一下,你就知道'))
# 返回的类型是True或False
# print(title)
if EC.title_is('百度一下,你就知道'):
print(True)
print(driver.title)
driver.quit()
2、title_contains(),判断当前页面的标题是否包含预期字符串
用法和title_is()类似,不重复介绍
3、presence_of_element_located() 判断元素是否被加在DOM树里,并不代表该元素一定可见
注意:传入的参数是tuple类型,第一个元素是定位方式,第二个元素是value。如果元素存在则返回元素位置,不存在则抛出异常(NoSuchElementException)
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')
r = EC.presence_of_element_located(('id', 'kw'))
print(r(driver))
4、visibility_of_element_located() 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)
和presence_of_element_located()类型,区别是presence_of_element_located()只强调元素存在于DOM树中,可见不可见无所谓。
如果元素存在且可见,就返回元素本身,如果存在但不可见则返回false
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036
5、visibility_of() 判断元素是否可见
和visibility_of_element_located()作用一样,区别是传参不同,visibility_of()接收的参数是定位后的元素
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')
element = driver.find_element_by_id('kw')
locate = WebDriverWait(driver, 5).until(EC.visibility_of(element))
locate.send_keys('selenium')
driver.quit()
6、presence_of_all_element_located()
判断是否至少有一个元素存在DOM树中
7、text_to_be_present_in_element()
判断某个元素中的text是否包含了预期的字符串
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')
r = WebDriverWait(driver, 5).until(EC.text_to_be_present_in_element(('xpath', '//*[@id="bottom_layer"]/div[1]/p[5]/a'), '使用百度前必读'))
print(r)
8、text_to_be_present_in_element_value()
判断某个元素中的value属性是否包含了预期字符串
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')
# 判断某个元素的value属性值是否符合预期字符串
r = WebDriverWait(driver, 5).until(EC.text_to_be_present_in_element_value(('id', 'su'), '百度一下'))
print(r)
9、frame_to_be_available_and_switch_to_it()
判断该表单是否可以切换进去,如果可以,返回True并switch进去,否则返回False
比如登录QQ邮箱:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
def find_element(located):
if isinstance(located, tuple):
return WebDriverWait(driver, 5).until(EC.presence_of_element_located(located))
else:
return '必须是元组类型'
driver = webdriver.Chrome()
driver.set_window_size(600, 800)
driver.get('https://mail.qq.com/')
# 判断iframe是否可以切换进去,返回布尔值
is_switch = WebDriverWait(driver, 5).until(EC.frame_to_be_available_and_switch_to_it(('id', 'login_frame')))
print(is_switch)
# 点击【帐号密码登录】
WebDriverWait(driver, 5).until(EC.presence_of_element_located(('id', 'switcher_plogin'))).click()
# 定位元素:账号输入框、密码输入框、登录按钮
user_element = find_element(('id', 'u'))
password_element = find_element(('id', 'p'))
login_element = find_element(('id', 'login_button'))
# 输入账号、密码、点击登录
user_element.send_keys('xxxxx@qq.com')
password_element.send_keys('password')
login_element.click()
driver.quit()
10、invisibility_of_element_located()
判断某个元素是否不存在与DOM树中或不可见
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')
a = EC.invisibility_of_element_located(('id', 'kw')) # 存在则返回False
print(a(driver))
11、element_to_be_clickable()
判断元素是否可见并是可以点击的
如果元素存在且可点击,则返回元素,如果元素存在但不可点击,则返回False
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.set_window_size(480, 600)
driver.get('https://www.baidu.com')
# 百度页该元素不可点击,返回False
a = EC.element_to_be_clickable(('xpath', '//*[@id="s-bottom-layer-right"]/span[2]'))
print(a(driver))
12、staleness_of()
等到一个元素从DOM树中移除,传入element元素,可以判断页面是否刷新了
13、element_to_be_selected()
判断某个元素是否被选中,一般用在下拉列表,传入element元素
14、element_selection_state_to_be()
判断某个元素的选中状态是否符合预期,方法参数是element和 is_selected
15、element_located_selection_state_to_be()
与element_selection_state_to_be()作用一样,只是方法参数不同,方法参数是located和 is_selected
16、alert_is_present()
按断页面上是否存在alert警告
今天的分享就到此结束了,大家还有什么不懂的可以评论区下提问哈,如果我的文章对你有所帮助的话,可以点赞三联支持一下哈