软件测试|web自动化测试神器playwright教程(三)

举报
Tester_muller 发表于 2023/03/05 10:48:06 2023/03/05
【摘要】 前言之前两篇文章,我们介绍了playwright框架以及简单使用,作为一款web自动化测试工具,元素定位是最基础的也算最重要的部分,我们在界面上的任何操作,其实都是对页面元素的操作,所以这部分是我们学习的核心。本篇文章我们就来介绍一下playwright的元素定位与操作。 元素定位与操作我们都知道selenium支持xpath,css_selector,text以及id、name等HTML...

前言

之前两篇文章,我们介绍了playwright框架以及简单使用,作为一款web自动化测试工具,元素定位是最基础的也算最重要的部分,我们在界面上的任何操作,其实都是对页面元素的操作,所以这部分是我们学习的核心。

本篇文章我们就来介绍一下playwright的元素定位与操作。

元素定位与操作

我们都知道selenium支持xpath,css_selector,text以及id、name等HTML属性定位方法,我们最为常用的还是xpath和css_selector两种定位方法。playwright也支持xpath,css_selector等常用定位方法。

下面是我们的定位操作示例:

我们可以先定位再操作

# 先定位再操作
    page.locator('#kw').fill("theshy")
    page.locator('#su').click()

或者直接调用fill 和 click 方法,如下:

page.fill('#kw', "theshy")
page.click('#su')

很显然,直接调用fill和click的代码更为简洁,因此,我们推荐使用下面的方法进行操作。

CSS与xpath定位方法

CSS定位和xpath定位是我们最常用的定位方法,使用也较为简单,示例代码如下:

# CSS and XPath
page.fill('css=#kw', "theshy")
page.click('xpath=//*[@id="su"]')

当然,playwright很聪明,我们可以省略掉我们的定位方法,只保留定位表达式,playwright会自动识别我们的定位方法,只要我们的表达式没有错误,就能正常执行,示例如下:

page.fill('#kw', "theshy")
page.click('//*[@id="su"]')

text 文本定位

text文本定位是非常实用的定位方法,只需要将我们看到的文本写入表达式就可以进行定位,xpath选择器对于text的定位如下所示:

  • 完全匹配文本 //*[text()="theshy "]
  • 部分匹配文本 //*[contains(text(),“theshy”)]

playwright 封装了text文本定位的方式,支持如下2种文本定位方式:

page.click("text=theshy")
page.click("text='Theshy'")

text=theshy 和 text=‘Theshy’ 的区别:

  • text=theshy 没有加引号(单引号或者双引号),模糊匹配,对大小写不敏感
  • text=‘Theshy’ 有引号,精确匹配,对大小写敏感

使用示例,比如点击百度首页上的“新闻” 文本,我们可以看到“新闻”是一个a标签

在这里插入图片描述

代码如下:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=1000)
    page = browser.new_page()
    page.goto("https://www.baidu.com")
    print(page.title())
    page.click('text=新闻')
    page.wait_for_timeout(5000)
    browser.close()

除了a标签,文本定位也可以用于对button的定位,比如百度首页的“百度一下”按钮

在这里插入图片描述

定位代码如下:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=1000)
    page = browser.new_page()
    page.goto("https://www.baidu.com")
    print(page.title())
    page.fill("#kw", "theshy")
    page.click('text=百度一下')
    page.wait_for_timeout(5000)
    browser.close()

其他定位方法

playwright还提供了其他内置的定位方法,常用的如下:

  • page.get_by_role()通过显式和隐式可访问性属性进行定位
  • page.get_by_text()通过文本内容定位
  • page.get_by_label()通过关联标签的文本定位表单控件
  • page.get_by_placeholder()按占位符定位输入
  • page.get_by_alt_text()通过替代文本定位元素,通常是图像
  • page.get_by_title()通过标题属性定位元素
  • page.get_by_test_id()根据data-testid属性定位元素(可以配置其他属性)

使用示例

page.get_by_label("User Name").fill("theshy")
page.get_by_label("Password").fill("secret-password")
page.get_by_role("button", name="Sign in").click()
expect(page.get_by_text("Welcome, theshy!")).to_be_visible()

总结

本篇文章主要介绍了playwright的定位方式,playwright支持CSS和xpath这两种最常用的定位方式,还有部分内置的定位方式。后续我们将介绍playwright对元素操作的方法。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200