playwright之定位使用-特别面向业务的UI自动化框架

random
random
random
订阅者
10532
文章
0
评论
测试交流1 544字数 706阅读2分21秒阅读模式
 
playwright之定位使用-特别面向业务的UI自动化框架插图

playwright使用-特别面向业务的UI自动化框架

playwright是微软推出的一款UI面向特征的自动化框架,本人以为这个属于是最近10年用过最无脑平铺,最简单的框架。通篇下来完全可以舍弃掉XPATH以及一堆难懂、不易于维护的元素特征,但仍可以写出稳定,少维护、易读的UI自动化case。

文本框不同类型输入

# 文本输入
page.locator('#name').fill('Peter')
# 日期输入
page.locator('#date').fill('2020-02-02')
# 时间输入
page.locator('#time').fill('13:15')
# 本地时间输入
page.locator('#local').fill('2020-03-02T05:15')
# 通过label输入,注意只能针对特定情况使用
page.locator('text=First Name').fill('Peter')

标准 select 选择选择

# 通过值
page.locator('select#colors').select_option('blue')
# 通过label
page.locator('select#colors').select_option(label='Blue')
# 多选
page.locator('select#colors').select_option(['red', 'green', 'blue'])

另:如果是 tagname 不是 select 的选择框,可以通过多次点击的方式选择

文件上传

# 选择一个文件
page.locator('input#upload').set_input_files('myfile.pdf')
# 选择多个文件
page.locator('input#upload').set_input_files(['file1.txt', 'file2.txt'])
# 移除全部已选的文件
page.locator('input#upload').set_input_files([])
# 从内存上传缓冲区
page.locator("input#upload").set_input_files(
files=[
{"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}
],
)

dialog 弹窗

#弹窗中确认
page.on("dialog", lambda dialog: dialog.accept())
page.locator("button").click()
#弹窗中取消
page.on("dialog", lambda dialog: dialog.dismiss())
page.locator("button").click()

iframe 内元素操作

#首选定位iframe需要操作的元素~然后操作不是selenium得切入切出
username = page.frame_locator('.frame-class').locator('#username-input')
username.fill('John')

获取 table 中数据

#返回table中第一个tr,返回格式是list
rows = page.locator("table tr")
#获取全本内容
texts = rows.all_text_contents()

连接定位 用于层级定位

css=article >> css=.bar > .baz >> css=span[attr=value]
# 等同于
document
.querySelector('article')
.querySelector('.bar > .baz')
.querySelector('span[attr=value]')

通过 nth 下标定位

# 点击第一个按钮,从0开始
page.locator("button >> nth=0").click()
# 或者
page.locator("button").first.click()
# 点击最后一个难就
page.locator("button >> nth=-1").click()

截屏

# 浏览器截屏
page.screenshot(path="screenshot.png")
#截全屏
page.screenshot(path="screenshot.png", full_page=True)
#截元素,验证码OCR识别可用
page.locator(".header").screenshot(path="screenshot.png")

等待

自动等待解决了一部分,具体见下表文章源自玩技e族-https://www.playezu.com/253131.html

ActionAttachedVisibleStableReceives EventsEnabledEditable
checkYesYesYesYesYes-
clickYesYesYesYesYes-
dblclickYesYesYesYesYes-
setCheckedYesYesYesYesYes-
tapYesYesYesYesYes-
uncheckYesYesYesYesYes-
hoverYesYesYesYes--
scrollIntoViewIfNeededYes-Yes---
screenshotYesYesYes---
#强制等待同time.sleep(3)
page.wait_for_timeout(3000)
#等待页面加载完成
page.wait_for_load_state()
方法支持3种参数 load domcontentloaded  networkidle
文章源自玩技e族-https://www.playezu.com/253131.html文章源自玩技e族-https://www.playezu.com/253131.html
 
    • refrain
      refrain 9

      playwright 有像 selenium grid 那样的分布式解决方案吗?之前找资料找了好久,最接近的一个案例是改源码自己去写 socket,替换掉中间 python 跟 node.js 交互的 socket 来达成控制远程设备浏览器的目标,但是这样做成本太高了

    匿名

    发表评论

    匿名网友
    确定

    拖动滑块以完成验证