Web自动化测试进阶:网页中难点之expected_ conditions的应用与原理

1531 篇文章 70 订阅
1437 篇文章 114 订阅

前言

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

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警告

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值