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

Web自动化测试进阶:网页中难点之expected_ conditions的应用与原理_第1张图片

前言

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

Web自动化测试进阶:网页中难点之expected_ conditions的应用与原理_第2张图片

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('[email protected]')
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警告

今天的分享就到此结束了,大家还有什么不懂的可以评论区下提问哈,如果我的文章对你有所帮助的话,可以点赞三联支持一下哈

你可能感兴趣的:(自动化测试,安全测试,软件测试,前端,集成测试,自动化测试,软件测试,功能测试)