我们在自动化测试中,有时需要判断元素是否可见或者是否可以点击,这些元素状态也可以用于断言中,playwright提供了多个方法用于获取元素的各种状态,以便用于我们的后续操作或者断言中。本篇文章就来给大家介绍一下playwright对元素状态的判断。
常见的元素状态判断方法
is_checked(selector: str) # checkbox or radio 是否选中
is_disabled(selector: str) # 元素是否可以点击或编辑
is_editable(selector: str) # 元素是否可以编辑
is_enabled(selector: str) # 是否可以操作
is_hidden(selector: str) # 是否隐藏
is_visible(selector: str) # 是否可见
playwright提供了3种方式去获取元素状态并进行判断,分别是page对象调用判断方法,locator对象调用判断方法,还有元素句柄判断方法**(元素句柄(element_handle)是通过page.query_selector()方法调用返回的ElementHandle ,这种方法不常用,本文不做讲解)。**
1. page对象调用的判断方法, 传一个selector 定位参数
page.is_checked(selector: str)
page.is_disabled(selector: str)
page.is_editable(selector: str)
page.is_enabled(selector: str)
page.is_hidden(selector: str)
page.is_visible(selector: str)
2. locator 对象调用的判断方法
locator.is_checked()
locator.is_disabled()
locator.is_editable()
locator.is_enabled()
locator.is_hidden()
locator.is_visible()
is_checked() 用于判断checkbox or radio 的状态是否被选中。我们以下图中的复选框为例,看一下勾选前后它is_checked()的应用。
项目实践代码
'''
author: 测试-老姜 交流微信/QQ:349940839
欢迎添加微信或QQ,加入学习群共同学习交流。
QQ交流群号:877498247
'''
from playwright.sync_api import Playwright, sync_playwright, expect
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False, args=['--start-maximized']) #默认无头模式,设置浏览器最大化
context = browser.new_context(no_viewport=True) # 创建上下文,相当浏览器于实例化,即打开浏览器
page = context.new_page() # 打开一个新标签页
page.goto("http://127.0.0.1:8080/oa/") # 打开网址
page.locator("input[name=\"loginId\"]").fill("sup")
password_input = page.locator("input[name=\"password\"]")
password_input.fill("s1234567")
page.wait_for_timeout(2000)
t = password_input.input_value()
print(t)
page.get_by_role("button", name="登录").click()
page.wait_for_timeout(2000)
page.locator('text=已发事项').click()
frame = page.frame_locator("iframe[name=\"iframe_main\"]").frame_locator("frame[name=\"listframe\"]")
v = frame.get_by_title('123414').get_attribute('onclick') # 获取onclick属性值
print(v)
import re
v = re.findall('"(.+?)",',v)[0]
check_Box = frame.locator(f'[value="{v}"]') # 定位复选框
r = check_Box.is_checked() #判断复选框是否被选中
print(r) #此时复选框没有被选中,打印为False
check_Box.click() # 点击复选框,复选框选中
page.wait_for_timeout(3000)
r = check_Box.is_checked()#判断复选框是否被选中
print(r)#此时复选框被选中,打印为True
page.wait_for_timeout(2000)
context.close()
browser.close()
is_visible()判断元素是否可见,我们以这个提示信息的关闭按钮为例,分别看一下这个元素在关闭前和关闭后is_visible()的判断结果。
项目实践代码
'''
author: 测试-老姜 交流微信/QQ:349940839
欢迎添加微信或QQ,加入学习群共同学习交流。
QQ交流群号:877498247
'''
from playwright.sync_api import Playwright, sync_playwright, expect
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False, args=['--start-maximized']) #默认无头模式,设置浏览器最大化
context = browser.new_context(no_viewport=True) # 创建上下文,相当浏览器于实例化,即打开浏览器
page = context.new_page() # 打开一个新标签页
page.goto("http://127.0.0.1:8080/oa/") # 打开网址
page.locator("input[name=\"loginId\"]").fill("sup")
page.get_by_role("button", name="登录").click()
page.wait_for_timeout(2000)
ele = page.locator('.d-close')
r = ele.is_visible() # locator对象调用案例,关闭按钮显示着,打印结果为True
print(r)
r = page.is_visible('.d-close') # page对象调用使用案例,关闭按钮显示着,打印结果为True
print(r)
page.wait_for_timeout(2000) #关闭提示窗口
ele.click()
r = ele.is_visible() # locator对象调用案例,提示窗口关闭,关闭按钮不显示,打印结果为False
print(r)
r = page.is_visible('.d-close') # page对象调用使用案例,关闭按钮显示着,打印结果为True
print(r)
page.wait_for_timeout(2000)
context.close()
browser.close()
is_editable() 判断元素是否可以编辑,我们以登录页面的用户名输入框为例看一下is_editable()的应用。
项目实践代码
'''
author: 测试-老姜 交流微信/QQ:349940839
欢迎添加微信或QQ,加入学习群共同学习交流。
QQ交流群号:877498247
'''
from playwright.sync_api import Playwright, sync_playwright, expect
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False, args=['--start-maximized']) #默认无头模式,设置浏览器最大化
context = browser.new_context(no_viewport=True) # 创建上下文,相当浏览器于实例化,即打开浏览器
page = context.new_page() # 打开一个新标签页
page.goto("http://127.0.0.1:8080/oa/") # 打开网址
loc = page.locator("input[name=\"loginId\"]")
r = loc.is_editable() # 用户名输入框可以编辑,打印结果为True
print(r)
loc.fill("sup")
page.wait_for_timeout(2000)
context.close()
browser.close()
其他元素状态判断的方法使用都是一样的,就不再一一举例了。