Playwright中locator() 方法快速定位网页元素[全面总结]

Playwright 是一个用于浏览器自动化的库,它支持多种浏览器和多种语言。在 Playwright 中,`page.locator()` 方法用于创建一个元素定位器(Element Locator)。元素定位器是一个强大的工具,可以帮助你在页面上找到并操作元素。
------------
page.locator(selector)
page.locator(selector, **kwargs)


Playwright 的 `page.locator()` 方法的详细解释:

1. **基本用法**:`page.locator(selector)` 方法返回一个元素定位器(Element Locator),这个定位器可以用于执行在页面或框架上的操作。定位器会在执行操作之前立即解析到元素,因此,对同一个定位器的一系列操作实际上可能在不同的 DOM 元素上执行。如果这些操作之间的 DOM 结构发生了变化,就会出现这种情况。

2. **参数**:
   - `selector`:用于解析 DOM 元素的选择器。
   - `has`(可选):缩小方法的结果范围,只包含匹配此相对定位器的元素。例如,具有 text=Playwright 的文章匹配 `<article><div>Playwright</div></article>`。内部定位器必须相对于外部定位器,并从外部定位器匹配开始查询,而不是从文档根开始。注意,外部和内部定位器必须属于同一框架。内部定位器不能包含 FrameLocators。
   - `has_not`(可选,v1.33 新增):匹配不包含匹配内部定位器的元素的元素。内部定位器针对外部定位器进行查询。例如,没有 div 的文章匹配 `<article><span>Playwright</span></article>`。注意,外部和内部定位器必须属于同一框架。内部定位器不能包含 FrameLocators。
   - `has_not_text`(可选,v1.33 新增):匹配不包含指定文本的元素,可能在子元素或后代元素中。当传递一个字符串时,匹配是大小写不敏感的,并搜索子字符串。
   - `has_text`(可选):匹配包含指定文本的元素,可能在子元素或后代元素中。当传递一个字符串时,匹配是大小写不敏感的,并搜索子字符串。例如,"Playwright" 匹配 `<article><div>Playwright</div></article>`。

3. **返回值**:`page.locator()` 方法返回一个 Locator 对象可以用于执行各种操作,如点击、填充、检查、选择选项等。

详细解释疑问,这两个参数 `has` 和 `has_text` 的区别可能有些微妙。:
- `has`:这个参数接受一个定位器作为值,这个定位器用于在找到的元素内部进行查找。例如,`has='text=Playwright'` 表示找到的元素
必须包含一个文本为 "Playwright" 的子元素。这个子元素可以是任何类型的元素,只要它的文本是 "Playwright" 就可以。例如,下面的 HTML 代码段就符合这个条件:
```html
  <div class="my-class">
    <span>Playwright</span>
  </div>
  ```
- `has_text`:这个参数接受一个字符串或正则表达式作为值,这个值用于匹配找到的元素的文本或其子元素的文本。例如,
`has_text='Playwright'` 表示找到的元素或其子元素的文本中必须包含 "Playwright"。这个文本可以在任何地方,只要在找到的元素或其子元素的文本中就可以。例如,下面的 HTML 代码段就符合这个条件:
 ```html
  <div class="my-class">
    This is a test of Playwright.
    <span>More text here.</span>
  </div>
  ```
在这个例子中,"Playwright" 是在 `div` 元素的文本中,而不是在一个特定的子元素的文本中。
总的来说,
`has` 参数更关注于结构,它要求存在一个特定的子元素,而 `has_text` 参数更关注于文本,它要求找到的元素或其子元素的文本中包含特定的字符串或匹配特定的正则表达式。

-------------

以下是一些常用的page.locator()元素定位方法:

1. **CSS 选择器**: 你可以使用 CSS 选择器定位元素。例如,`page.locator('.my-class')` 会定位到页面上所有具有 "my-class" 类的元素。

2. **XPath**: 你也可以使用 XPath 表达式来定位元素。例如,`page.locator('//div[@id="my-id"]')` 会定位到页面上所有 id 为 "my-id" 的 div 元素。

3. **文本内容**: 你可以使用 `:text("my text")` 来定位包含特定文本的元素。例如,`page.locator(':text("Hello, World!")')` 会定位到页面上所有包含 "Hello, World!" 文本的元素。

4. **特性选择器**: 你可以使用 `[attr=value]` 来定位具有特定属性值的元素。例如,`page.locator('input[name="username"]')` 会定位到页面上所有 name 属性为 "username" 的 input 元素。

5. **ID 选择器**: 你可以使用 `#id` 来定位具有特定 id 的元素。例如,`page.locator('#my-id')` 会定位到页面上 id 为 "my-id" 的元素。

6. **类选择器**: 你可以使用 `.class` 来定位具有特定类的元素。例如,`page.locator('.my-class')` 会定位到页面上所有具有 "my-class" 类的元素。

7. **标签名选择器**: 你可以使用 `tagname` 来定位特定类型的元素。例如,`page.locator('div')` 会定位到页面上所有的 div 元素。

这些都是 Playwright 中 `page.locator()` 方法的常用定位方式。你可以根据你的需要选择合适的方法来定位元素。
----------

在 Playwright 中,`page.locator()` 方法返回一个元素定位器(Element Locator),这个定位器可以用于定位和操作页面上的元素。以下是一些更深入的介绍:

1. **链式定位**:`page.locator()` 的返回值本身也有 `locator()` 方法这意味着你可以链式地定位元素。例如,`page.locator('.my-class').locator('.my-subclass')` 会定位到所有具有 "my-class" 类的元素中,再次具有 "my-subclass" 类的元素。

2. **操作元素**:定位器提供了一系列方法用于操作元素,例如 `click()`、`fill()`、`check()`、`uncheck()`、`selectOption()` 等。这些方法可以直接在定位器上调用,例如 `page.locator('#my-id').click()` 会点击 id 为 "my-id" 的元素。

3. **获取元素属性和状态**:定位器还提供了一些方法用于获取元素的属性和状态,例如 `getAttribute()`、`innerText()`、`isVisible()`、`isChecked()` 等。例如,`page.locator('#my-id').getAttribute('value')` 会返回 id 为 "my-id" 的元素的 value 属性值。

4. **等待元素**:定位器提供了 `waitFor()` 方法用于等待元素出现。例如,`page.locator('#my-id').waitFor()` 会等待直到 id 为 "my-id" 的元素出现。

5. **处理多个元素**:如果定位器定位到多个元素,你可以使用 `nth()` 方法来选择其中的一个。例如,`page.locator('.my-class').nth(1)` 会选择第二个具有 "my-class" 类的元素(索引从 0 开始)。

6. **元素计数**:你可以使用 `count()` 方法来获取定位器定位到的元素数量。例如,`page.locator('.my-class').count()` 会返回页面上具有 "my-class" 类的元素的数量。

这些都是 Playwright 中 `page.locator()` 方法的高级用法。你可以根据你的需要使用这些方法来定位和操作元素。
--------

更多高级用法和技巧:

1. **元素的文本内容**:`textContent()` 方法可以用于获取元素的文本内容。例如,`page.locator('#my-id').textContent()` 会返回 id 为 "my-id" 的元素的文本内容。

2. **元素的 HTML**:`innerHTML()` 方法可以用于获取元素的内部 HTML。例如,`page.locator('#my-id').innerHTML()` 会返回 id 为 "my-id" 的元素的内部 HTML。

3. **元素的外部 HTML**:`outerHTML()` 方法可以用于获取元素的外部 HTML。例如,`page.locator('#my-id').outerHTML()` 会返回 id 为 "my-id" 的元素的外部 HTML。

4. **等待元素消失**:`waitFor({ state: 'detached' })` 方法可以用于等待元素消失。例如,`page.locator('#my-id').waitFor({ state: 'detached' })` 会等待直到 id 为 "my-id" 的元素消失。

5. **等待元素隐藏**:`waitFor({ state: 'hidden' })` 方法可以用于等待元素隐藏。例如,`page.locator('#my-id').waitFor({ state: 'hidden' })` 会等待直到 id 为 "my-id" 的元素隐藏。

6. **等待元素显示**:`waitFor({ state: 'visible' })` 方法可以用于等待元素显示。例如,`page.locator('#my-id').waitFor({ state: 'visible' })` 会等待直到 id 为 "my-id" 的元素显示。

7. **等待元素可编辑**:`waitFor({ state: 'editable' })` 方法可以用于等待元素可编辑。例如,`page.locator('#my-id').waitFor({ state: 'editable' })` 会等待直到 id 为 "my-id" 的元素可编辑。

8. **等待元素被选中**:`waitFor({ state: 'checked' })` 方法可以用于等待元素被选中。例如,`page.locator('#my-id').waitFor({ state: 'checked' })` 会等待直到 id 为 "my-id" 的元素被选中。

这些都是 Playwright 中 `page.locator()` 方法的一些更高级的用法和技巧。通过熟练掌握这些方法,你可以更有效地定位和操作网页上的元素。
----------------------------------------------------------------------------------------

在 Playwright 中,Locator 是自动等待和重试机制的核心部分。简单来说,Locator 提供了在任何时刻在页面上找到元素的方法。可以使用 page.locator() 方法创建一个 Locator

Locator 对象的主要优点是它们可以自动等待元素出现在页面上。例如,如果你创建了一个 Locator,然后立即尝试点击它,但是这个元素还没有出现在页面上,Playwright 会自动等待这个元素出现,然后再执行点击操作。

此外,Locator 对象还可以重试操作。例如,如果你尝试点击一个 Locator,但是这个元素在被点击的瞬间消失了,Playwright 会自动重试点击操作,直到操作成功或超时。
以下是一些使用 Locator 对象方法的示例:

# 创建一个 Locator
locator = page.locator('#my-id')# 点击 Locator
locator.click()# 填充 Locator
locator.fill('Hello, world!')# 获取 Locator 的文本
text = locator.text_content()# 获取 Locator 的 HTML
html = locator.inner_html()# 等待 Locator 出现在页面上
locator.wait_for()# 等待 Locator 从页面上消失
locator.wait_for('hidden')

以下是 `Locator` 对象的方法和属性的简单解释:

---Methods---

- `all`: 返回所有匹配的元素。
- `all_inner_texts`: 返回所有匹配元素的内部文本。
- `all_text_contents`: 返回所有匹配元素的文本内容。

- `and_`: 创建一个新的 `Locator`,它匹配同时满足当前 `Locator` 和另一个条件的元素。
- `blur`: 让匹配的元素失去焦点。
- `bounding_box`: 返回匹配元素的边界框。
- `check`: 勾选匹配的元素(如果它是一个复选框或单选框)。
- `clear`: 清除匹配元素的输入值(如果它是一个输入元素)。
- `click`: 点击匹配的元素。
- `count`: 返回匹配元素的数量。
- `dblclick`: 双击匹配的元素。
- `dispatch_event`: 在匹配的元素上分发一个事件。
- `drag_to`: 将匹配的元素拖动到另一个位置。
- `evaluate`: 在匹配的元素上执行一个 JavaScript 函数。
- `evaluate_all`: 在所有匹配的元素上执行一个 JavaScript 函数。
- `evaluate_handle`: 获取一个可以在匹配的元素上执行 JavaScript 的句柄。
- `fill`: 填充匹配元素的输入值(如果它是一个输入元素)。

- `filter`: 创建一个新的 `Locator`,它匹配满足一个函数的元素。
- `focus`: 让匹配的元素获取焦点。
- `frame_locator`: 返回匹配元素的 `FrameLocator`(如果它是一个 `iframe` 元素)。
- `get_attribute`: 获取匹配元素的属性值。
- `get_by_alt_text`: 创建一个新的 `Locator`,它匹配 `alt` 属性包含指定文本的元素。
- `get_by_label`: 创建一个新的 `Locator`,它匹配 `label` 属性包含指定文本的元素。
- `get_by_placeholder`: 创建一个新的 `Locator`,它匹配 `placeholder` 属性包含指定文本的元素。
- `get_by_role`: 创建一个新的 `Locator`,它匹配 `role` 属性包含指定文本的元素。
- `get_by_test_id`: 创建一个新的 `Locator`,它匹配 `data-testid` 属性包含指定文本的元素。
- `get_by_text`: 创建一个新的 `Locator`,它匹配文本包含指定文本的元素。
- `get_by_title`: 创建一个新的 `Locator`,它匹配 `title` 属性包含指定文本的元素。
- `highlight`: 高亮匹配的元素。
- `hover`: 将鼠标悬停在匹配的元素上。
- `inner_html`: 获取匹配元素的内部 HTML。
- `inner_text`: 获取匹配元素的内部文本。

- `input_value`: 获取匹配元素的输入值(如果它是一个输入元素)。
- `is_checked`: 检查匹配的元素是否被勾选(如果它是一个复选框或单选框)。
- `is_disabled`: 检查匹配的元素是否被禁用。
- `is_editable`: 检查匹配的元素是否可编辑。
- `is_enabled`: 检查匹配的元素是否启用。
- `is_hidden`: 检查匹配的元素是否隐藏。
- `is_visible`: 检查匹配的元素是否可见。
- `locator`: 创建一个新的 `Locator`,它匹配满足一个定位器的元素。
- `nth`: 创建一个新的 `Locator`,它匹配第 n 个元素。
- `or_`: 创建一个新的 `Locator`,它匹配满足当前 `Locator` 或另一个条件的元素。
- `press`: 在匹配的元素上按下一个键(如果它是一个输入元素)。
- `press_sequentially`: 在匹配的元素上按下一系列的键(如果它是一个输入元素)。
- `screenshot`: 对匹配的元素进行截图。
- `scroll_into_view_if_needed`: 如果需要,将匹配的元素滚动到视图中。
- `select_option`: 选择匹配的元素的一个选项(如果它是一个 `select` 元素)。
- `select_text`: 选择匹配的元素的文本(如果它是一个输入元素或 `textarea` 元素)。
- `set_checked`: 设置匹配的元素的勾选状态(如果它是一个复选框或单选框)。
- `set_input_files`: 设置匹配的元素的输入文件(如果它是一个文件输入元素)。
- `tap`: 在匹配的元素上进行触摸操作。
- `text_content`: 获取匹配元素的文本内容。
- `uncheck`: 取消勾选匹配的元素(如果它是一个复选框或单选框)。
- `wait_for`: 等待匹配的元素满足一个条件。

---Properties---

- `first`: 返回第一个匹配的元素。
- `last`: 返回最后一个匹配的元素。
- `page`: 返回关联的 `Page` 对象。

这些方法和属性使 `Locator` 对象能够执行各种操作,包括查找元素、与元素交互、获取元素的信息等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端基础】什么是视口?

视口 了解视口相关概念及理想视口的设置 是移动Web开发非常重要环节。 什么是视口&#xff1f; 视口简单来说就是浏览器显示页面内容的区域。 在PC端&#xff0c;正常的视口宽度就是整个浏览器的窗口可视区的宽度&#xff0c;会随着浏览器窗口大小的重置而缩放&#xff1b;…

CTF 题型 SSRF攻击例题总结

CTF 题型 SSRF攻击&例题总结 文章目录 CTF 题型 SSRF攻击&例题总结Server-side Request Forgery 服务端请求伪造SSRF的利用面1 任意文件读取 前提是知道要读取的文件名2 探测内网资源3 使用gopher协议扩展攻击面Gopher协议 &#xff08;注意是70端口&#xff09;python…

前端项目,个人笔记(五)【图片懒加载 + 路由配置 + 面包屑 + 路由行为修改】

目录 1、图片懒加载 步骤一&#xff1a;自定义全局指令 步骤二&#xff1a;代码中使用 ​编辑步骤三&#xff1a;效果查看 步骤四&#xff1a;代码优化 2、封装组件案例-传对象 3、路由配置——tab标签 4、根据tab标签添加面包屑 4.1、实现 4.2、bug&#xff1a;需要…

智能合约 之 部署ERC-20

Remix介绍 Remix是一个由以太坊社区开发的在线集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在帮助开发者编写、测试和部署以太坊智能合约。它提供了一个简单易用的界面&#xff0c;使得开发者可以在浏览器中直接进行智能合约的开发&#xff0c;而无需安装任何额外的…

进销存管理完整方案:那些让人头疼的进销存难题及解决方法!

什么是进销存管理&#xff1f;为何进销存管理在企业管理中如此重要&#xff1f;进销存管理的核心模块包括哪些&#xff1f;为何企业在进销存管理中常常遭遇前后方协作不畅、数据不同步等痛点&#xff1f;又该如何针对进销存管理痛点进行优化&#xff1f;本文将从进销存管理的基…

代码随想录训练营第50天 | LeetCode 123.买卖股票的最佳时机III、LeetCode 188.买卖股票的最佳时机IV

LeetCode 123.买卖股票的最佳时机III 文章讲解&#xff1a;代码随想录(programmercarl.com) 视频讲解&#xff1a;动态规划&#xff0c;股票至多买卖两次&#xff0c;怎么求&#xff1f; | LeetCode&#xff1a;123.买卖股票最佳时机III_哔哩哔哩_bilibili 思路 代码如下&am…

java实现kml文件下载接口

根据业务需求&#xff0c;需提供一个下载kml格式航线文件的HTTP GET接口 示例代码 package com.kyrielx.kmzdemo.controller;import org.apache.commons.io.FileUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org…

git是什么git能做什么

git是什么 git 是一个免费、开源、分布式的版本控制系统&#xff0c;跟踪个人和团队在项目上协作时的变更历史。随着开发者对项目进行更改&#xff0c;可以随时恢复项目的任何早期版本。 git能做什么 开发者可以通过git查看项目历史&#xff0c;了解&#xff1a; - 做了哪些…

5.首页搜索与瀑布流

搜索栏 官网 https://vkuviewdoc.fsq.pub/components/search.html 是否开启右边控件 该控件为类似按钮形式&#xff0c;可以设置为"搜索"或者"取消"等内容&#xff0c;如果开启动画效果&#xff0c;用户确认搜索后&#xff0c;该控件会自动消失 show-ac…

各种窗函数对脉压结果的影响

雷达导论专栏总目录链接: 雷达导论专栏总目录-CSDN博客 1. 各类窗函数 有几个窗函数的系数可配,配置如下: tukeywin(N,0.75)kaiser(N,2.5)gausswin(N,1.5)taylorwin(N,3,-24)2. 时域加窗 时域加窗时,直接加在匹配滤波函数上:Htw=exp(1j*pi*K*tp.^2).*win;。那么矩形窗就相…

使用jQuery的autocomplete实现数据查询一次,联想自动补全

书接上回&#xff0c;上次说到在jsp页面中&#xff0c;通过监听输入框的数值变化&#xff0c;实时查询数据库&#xff0c;得到返回值使用autocomplete属性自动补全&#xff0c;实现一个联想补全辅助操作&#xff0c;链接&#xff1a;使用jquery的autocomplete属性实现联想补全操…

73_Pandas获取分位数/百分位数

73_Pandas获取分位数/百分位数 使用 quantile() 方法获取 pandas 中 DataFrame 或 Series 的分位数/百分位数。 目录 Quantile() 的基本用法指定要获取的分位数/百分位数&#xff1a;参数 q指定interpolation方法&#xff1a;参数interpolation 数据类型 dtype 的差异 指定行…

二、Kubernetes(k8s)中部署项目wordpress(php博客项目,数据库mysql)

前期准备 1、关机顺序 2、开机顺序 (1)、k8s-ha1、k8s-ha2 (2)、master01、master02、master03 (3)、node01、node02 一、集群服务对外提供访问&#xff0c;需要通过Ingress代理发布域名 mast01上传 ingress-nginx.yaml node01、node02 上传 ingress-nginx.tar 、kube-webh…

鸿蒙开发实战:【网络管理-Socket连接】

介绍 本示例主要演示了Socket在网络通信方面的应用&#xff0c;展示了Socket在两端设备的连接验证、聊天通信方面的应用。 效果预览 使用说明 1.打开应用&#xff0c;点击用户文本框选择要登录的用户&#xff0c;并输入另一个设备的IP地址&#xff0c;点击确定按钮进入已登录…

【C++】用红黑树模拟实现set、map

目录 前言及准备&#xff1a;一、红黑树接口1.1 begin1.2 end1.3 查找1.4 插入1.5 左单旋和右单旋 二、树形迭代器&#xff08;正向&#xff09;2.1 前置 三、模拟实现set四、模拟实现map 前言及准备&#xff1a; set、map的底层结构是红黑树&#xff0c;它们的函数通过调用红…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Toggle)

组件提供勾选框样式、状态按钮样式及开关样式。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 仅当ToggleType为Button时可包含子组件。 接口 Toggle(options: { type: ToggleType, is…

一台电脑安装多个版本node,如何切换使用

直接上答案&#xff0c;请安装nvm——nodejs的版本管理工具 官网地址在此&#xff1a;nvm文档手册 - nvm是一个nodejs版本管理工具 - nvm中文网 (uihtm.com) 1.由于我电脑本来就有node14&#xff0c;所以需要先卸载 原来的node&#xff0c;建议在软件目录自带的node文件夹中点…

Java学习笔记NO.20

Java流程控制 1. 用户交互 Scanner Java中的Scanner类用于获取用户输入&#xff0c;可以从标准输入&#xff08;键盘&#xff09;读取各种类型的数据。 import java.util.Scanner; public class UserInputExample { public static void main(String[] args) { Scanner sc…

weaviate向量库安装

简介 Weaviate 是一个开源的向量数据库和搜索引擎&#xff0c;专门用于存储、搜索和分析向量数据。它提供了一个简单易用的 REST API&#xff0c;使得用户可以轻松地将向量数据存储到数据库中&#xff0c;并且能够以高效的方式进行相似向量的搜索。 以下是一些 Weaviate 向量…

面向切面的编程实战

面向切面的编程&#xff08;AOP&#xff09;就是让哥们写代码的时候更加关注核心业务的实现&#xff0c;将核心业务代码前后的日志等不重要的通过注解的方式&#xff0c;交给其他部分完成&#xff0c;使得代码有更高的可维护性。 具体使用 先定义一个注解 Target(ElementTyp…