前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【python自动化】Playwright基础教程(三)定位操作

【python自动化】Playwright基础教程(三)定位操作

作者头像
梦无矶小仔
发布2023-09-19 08:12:27
7710
发布2023-09-19 08:12:27
举报

上文我们已经能够成功进行登录操作了。对于里面的一些定位方式,输入,点击等操作,在这一节,我们直接进行一个大汇总。以后遇到直接来这里搜。

定位操作

定位操作都在Page类下。养成看源码的习惯,结合官方文档,源码还写了例子,真的是很详细了。

按alt文本定位元素-get_by_alt_text()

使用频率:★☆☆☆☆

释义:按alt属性的文本进行定位元素。

网页代码:

代码语言:javascript
复制
<img alt='Playwright logo'>

定位用法:

代码语言:javascript
复制
page.get_by_alt_text("Playwright logo").click()

参数:

  • text:str,输入要查找元素的文本。
  • exact:bool,是否找到完全匹配项:区分大小写和全字符串。默认为 false。

按标签定位元素-get_by_label()

使用频率:★☆☆☆☆

释义:允许按关联 <label> or aria-labelledby 元素的文本或 aria-label 属性查找输入元素。

网页代码:

代码语言:javascript
复制
<input aria-label="Username">
<label for="password-input">Password:</label>
<input id="password-input">

定位用法:

代码语言:javascript
复制
page.get_by_label("Username").fill("john")
page.get_by_label("Password").fill("secret")

参数:

  • text:str,输入要查找元素的文本。
  • exact:bool,是否找到完全匹配项:区分大小写和全字符串。默认为 false。

占位符定位-get_by_placeholder()

使用频率:★★★★☆

释义:按占位符文本定位

网页代码:

代码语言:javascript
复制
<input type="email" placeholder="请输入邮箱" />

定位用法:

代码语言:javascript
复制
page.get_by_placeholder("请输入邮箱").fill("8888888@qq.com")

参数:

  • text:str,输入要查找元素的文本。
  • exact:bool,是否找到完全匹配项:区分大小写和全字符串。默认为 false。

角色属性定位-get_by_role()

使用频率:★★☆☆☆

释义:通过ARIA角色、ARIA属性和可访问名称定位元素

网页代码:

代码语言:javascript
复制
<h3>Sign up</h3>
<label>
  <input type="checkbox" /> Subscribe
</label>
<br/>
<button>Submit</button>

定位用法:

代码语言:javascript
复制
# 这个是pytest-playwright进行断言的方式,后续我们会讲
expect(page.get_by_role("heading", name="Sign up")).to_be_visible()

page.get_by_role("checkbox", name="Subscribe").check()

page.get_by_role("button", name=re.compile("submit", re.IGNORECASE)).click()

参数:太多了,看源码吧,其中role参数比较重要,比如alert就可以用来点击弹窗。

role:必填项,可选如下

  • "alert"|"alertdialog"|"application"|"article"|"banner"|"blockquote"|"button"|"caption"|"cell"|"checkbox"|"code"|"columnheader"|"combobox"|"complementary"|"contentinfo"|"definition"|"deletion"|"dialog"|"directory"|"document"|"emphasis"|"feed"|"figure"|"form"|"generic"|"grid"|"gridcell"|"group"|"heading"|"img"|"insertion"|"link"|"list"|"listbox"|"listitem"|"log"|"main"|"marquee"|"math"|"meter"|"menu"|"menubar"|"menuitem"|"menuitemcheckbox"|"menuitemradio"|"navigation"|"none"|"note"|"option"|"paragraph"|"presentation"|"progressbar"|"radio"|"radiogroup"|"region"|"row"|"rowgroup"|"rowheader"|"scrollbar"|"search"|"searchbox"|"separator"|"slider"|"spinbutton"|"status"|"strong"|"subscript"|"superscript"|"switch"|"tab"|"table"|"tablist"|"tabpanel"|"term"|"textbox"|"time"|"timer"|"toolbar"|"tooltip"|"tree"|"treegrid"|"treeitem"

name:str,匹配辅助名称的选项。默认情况下,匹配不区分大小写,并搜索子字符串,用于 exact 控制此行为。

测试ID定位-get_by_test_id()

使用频率:★★★★☆

释义:通过测试ID定位元素

注意事项:默认情况下, data-testid 属性用作测试 ID。如有必要,请使用selectors.set_test_id_attribute() 配置不同的测试 ID 属性。

网页代码:

代码语言:javascript
复制
<button data-testid="directions">我是一个带有特殊id的按钮</button>

定位用法:

代码语言:javascript
复制
page.get_by_test_id("directions").click()

参数:

  • test_id: str,元素的ID

文本定位-get_by_text()

使用频率:★★★★☆

释义:通过给定的文本进行元素匹配。

网页代码:

代码语言:javascript
复制
<div>梦无矶 <span>小仔</span></div>
<div>梦无矶</div>

注意我第一个梦无矶后面是有一个空格的。

定位用法:

代码语言:javascript
复制
# 匹配 <span>
page.get_by_text("小仔")

# 匹配第一个 <div> 
page.get_by_text("梦无矶")

# 匹配第二个 <div>
page.get_by_text("梦无矶", exact=True) # 开启了精准匹配

# 匹配多个 <div>
page.get_by_text(re.compile("梦无矶"))

#匹配第二个 <div>
page.get_by_text(re.compile("^梦无矶$", re.IGNORECASE))

参数:

  • text:str , 要查找元素的文本。
  • exact:bool,是否找到完全匹配项:区分大小写和全字符串。默认为 false。

标题定位-get_by_title()

使用频率:★★★☆☆

释义:通过标题文本进行定位元素

网页代码:

代码语言:javascript
复制
<span title='Issues count'>25 issues</span>

定位用法:

代码语言:javascript
复制
page.get_by_title("Issues count")

参数:

  • text:str,标题文本
  • exact,bool,是否找到完全匹配项:区分大小写和全字符串。默认为 false。

定位器定位-locator()

使用频率:★★★★★

释义:该方法返回可用于在此页面/框架上执行操作的元素定位器。定位器在执行操作之前立即解析为元素,因此实际上可以在不同的 DOM 元素上对同一定位器执行一系列操作。

这里面我们可以理解为selenium中的css selector,xpath selector定位,用xpath更多。

定位用法:

代码语言:javascript
复制
page.locator(selector)
page.locator(selector, **kwargs)

参数:

  • selector:str,解析DOM元素时要用的选择器,如标签选择器。
  • has_text: 匹配包含指定文本的元素,这些元素可能包含在子元素或后代元素中。传递 [string] 时,匹配不区分大小写并搜索子字符串。例如, "Playwright" 匹配 <article><div>Playwright</div></article> .
  • has_not_text: 匹配不包含指定文本的元素,这些元素可能包含子元素或后代元素。传递 [string] 时,匹配不区分大小写并搜索子字符串。
  • has:匹配包含与内部定位器匹配的元素的元素。根据外部定位器查询内部定位器。例如, article has text=Playwright 匹配 <article><div>Playwright</div></article> 项。
  • has_not:匹配不包含与内部定位器匹配的元素的元素。根据外部定位器查询内部定位器。例如,article has_not div 匹配 <article><span>Playwright</span></article> 项。

下一节我们介绍事件操作,之后进行一些实际运用讲解。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-12 08:02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 梦无矶的测试开发之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定位操作
  • 按alt文本定位元素-get_by_alt_text()
  • 按标签定位元素-get_by_label()
  • 占位符定位-get_by_placeholder()
  • 角色属性定位-get_by_role()
  • 测试ID定位-get_by_test_id()
  • 文本定位-get_by_text()
  • 标题定位-get_by_title()
  • 定位器定位-locator()
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档