Python写UI自动化--playwright(点击操作)

本篇介绍playwright点击操作,click()方法的常用参数

目录

[0. selector (必需)](#0. selector (必需))

[1. modifiers(可选)](#1. modifiers(可选))

[2. position(可选)](#2. position(可选))

[3. button(可选)](#3. button(可选))

[4. click_count(可选)](#4. click_count(可选))

[5. delay](#5. delay)

[6. timeout(可选)](#6. timeout(可选))

[7. force=True(可选)](#7. force=True(可选))

[8. trial=True(可选)](#8. trial=True(可选))

[9. no_wait_after(可选)](#9. no_wait_after(可选))

注意事项


0. selector (必需)

类型: string
描述: CSS 选择器或 XPath 表达式,用于定位要点击的元素。
是必须提供的参数,用于确定要点击的元素。

1. modifiers(可选)

传入一个列表,其中是键盘的按键操作,比如"Ctrl","Alt","Shift","win键"等

类型: Array<string>
**描述:**一个字符串数组,用于指定要按下的修饰键。可用的修饰键包括 "Shift", "Control", "Alt", "Meta"(代表 Command 键或 Windows 键)。

使用场景
模拟组合键点击: 如果需要模拟用户同时按下 Shift 或 Control 键并点击元素,可以使用 modifiers 参数。例如,模拟用户按下 Ctrl 键并点击链接以在新标签页中打开链接。
**模拟特殊操作:**在某些情况下,需要模拟特殊的键盘操作。例如,在表格中按下 Ctrl 键并点击单元格以选择多个项。

python 复制代码
from playwright.sync_api import Page
def test_pw_click(page: Page):
    page.goto(url='https://www.baidu.com')
    page.locator('//input[@name="wd"]').fill("日历")
    page.get_by_text('百度一下').click(modifiers=["Control"]) #Control、Alt、Shift、Meta

2. position(可选)

传入一个字典,{"x":10, "y": 20 },表示点击位置距离元素左上角的偏移量。可以用bounding_box()方法先查看这个元素的width和height,再确定自己点击位置要偏移多少,偏移量不能超过这个元素的宽高范围。当被操作元素被遮罩时,虽然playwright会自动寻找可点击位置,但是这样显示指定点击位置会更精确一些

类型: { x: number, y: number }
描述: 指定相对于元素左上角的点击位置。x 和 y 分别表示水平和垂直偏移量。
**使用场景:**需要在元素内部的特定位置点击时,可以使用 position 参数。这对于需要点击元素内的某个图标或按钮的情况很有用。例如,如果有一个带有下拉箭头的按钮,可能需要点击箭头而不是整个按钮区域。

python 复制代码
from playwright.sync_api import Page
def test_pw_click(page: Page):
    page.goto(url='https://www.baidu.com')
    page.locator('//input[@name="wd"]').fill("翻译")
    page.get_by_text('百度一下').click()

     # 获取元素位置
    page.get_by_text('百度首页').bounding_box()
     # 返回示例:{'x': 1082, 'y': 24, 'width': 52, 'height': 24}
     # 表示这个元素在整个界面位置,以及元素本身的宽和高范围大小

     # 点击元素的特定位置
    page.click("#my-button", position={"x": 10, "y": 10})

3. button(可选)

可以模拟左键右键中间键点击

类型: "left" | "right" | "middle"
描述: 指定要使用的鼠标按钮。默认值为 "left"。
**使用场景:**需要模拟右键点击或其他类型的鼠标按钮点击时使用。例如模拟右键点击来打开上下文菜单。

python 复制代码
from playwright.sync_api import Page
def test_pw_click(page: Page):
    page.goto(url='https://www.baidu.com')
    page.locator('//input[@name="wd"]').fill("翻译")
    page.get_by_text('百度一下').click()
    
    page.get_by_text('百度首页').click(button="right") #left左键 right右键 middle中键

4. click_count(可选)

传点击次数,和delay参数结合使用

类型: number
描述: 指定点击次数。默认为 1,可以设置为 2 来模拟双击。
使用场景: 需要模拟双击或其他次数的点击时使用。例如,双击文件列表中的文件来打开它。

python 复制代码
page.locator('//input[@id="su"]').click(click_count=3,delay=3_000)

双击还有另一个方便的方法dblclick(),括号中的参数跟click()类似:

python 复制代码
page.locator('//input[@id="su"]').dblclick()

5. delay

类型: number
描述: 设置两次点击之间的延迟时间(毫秒)。默认为 0。
**使用场景:**需要模拟用户点击时的自然延迟,比如在双击之间加入短暂的停顿,以模仿真实的用户行为。

6. timeout(可选)

传入超时时间

类型: number
描述: 设置最大等待时间(毫秒),超过此时间后将抛出超时错误。默认为 30000 毫秒(30 秒)。
使用场景: 当你需要限制等待元素变得可点击的时间。例如,在等待元素出现时,你可能不想等待太长时间。

python 复制代码
page.get_by_text('#要点击的元素').click(timeout=1_000) #超时时间,默认30s

7. force=True(可选)

表示playwright auto-waiting机制中,当设置 force=True 时,即使元素被其他元素遮挡,Playwright 也会尝试强制点击该元素。这意味着即使有对话框或其他元素遮挡了目标元素,Playwright 也会尝试直接点击目标元素。

类型: bool
描述: 如果为 true,则强制点击元素,即使它被遮挡。默认为 false。
**使用场景:**当元素被其他元素遮挡时,仍然需要点击它。例如,如果一个按钮被一个模态对话框遮挡,可能需要强制点击该按钮。

python 复制代码
page.get_by_text('#需要点击的元素').click(force=True)

8. trial=True(可选)

表示只进行playwright auto-waiting的等待而不进行click操作

类型: bool
描述: 如果为 true,则不执行实际的点击操作,而是仅尝试查找元素并检查是否可以点击。默认为 false。
**使用场景:**需要验证元素是否可以点击,但不执行实际的点击操作。例如,在测试准备阶段,你可能需要检查页面上的所有按钮是否可点击。

python 复制代码
page.get_by_text('#要点击的元素').click(trial=True) #点击前检查元素

9. no_wait_after(可选)

表示,一般情况下,如果click操作触发了一个导航事件,那么pw会等待导航结束,但是这样可能导致click一直未结束而失败。这个就是为了避免这种情况发生。

类型: bool
描述: 如果为 true,则点击后不等待页面导航或资源加载完成。默认为 false。
使用场景: 当点击操作不会导致页面重新加载,而只是触发一些异步操作(如 AJAX 请求)时。例如,如果点击按钮只是更新页面的一部分内容而不刷新整个页面。

python 复制代码
page.get_by_text('#要点击的元素').click(no_wait_after=True) #点击后不等待页面加载

总结一下,playwright的click操作有这么几步:

1.Auto-waiting机制,自动等待元素到可以被成功点击,除非设置了force=True

2.把元素滑动到可以被点击的地方

3.合并modifiers中的按键进行点击操作,除非设置了trial=True

4.等待可能的导航结束,除非设置了no_wait_after=True

注意事项

在使用 click 方法时,确保元素是可见的并且在页面上是可交互的。

使用 position 参数时,请确保指定的坐标位于元素的有效范围内。

使用 noWaitAfter 参数时要注意,如果不等待页面加载完成,可能会影响后续的测试步骤。

使用 timeout 参数时要合理设置,过短的超时时间可能导致测试失败,过长则可能降低测试效率。

熟悉click()方法的这些参数,我们可以根据需求精确地控制点击行为,使自动化测试更加可靠和高效。

相关推荐
花酒锄作田3 小时前
FastAPI 使用 session 认证
python·fastapi
lsswear3 小时前
Python 并发 线程
开发语言·python
郑州光合科技余经理4 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi4 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz4 小时前
MLIR OpBuilder
开发语言·python·mlir
红宝村村长5 小时前
windows笔记本双系统ubuntu设置
开发语言
威联通安全存储6 小时前
TS-h2287XU-RP 在家电制造总装与质检数据场景的部署
python·制造
泡泡鱼(敲代码中)6 小时前
Python 字符串 str 完整学习笔记
python·学习
troy1287 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
菜鸟~noob2337 小时前
【电子战】第15篇:混合定位——TDOA/FDOA/AOA 联合【含matlab代码】
开发语言·matlab