Playwright元素实战操作

Playwright可以与HTML输入元素交互,例如文本输入框、复选框、单选按钮、选择选项、鼠标点击、键盘输入和快捷键,以及上传文件和聚焦元素。
文本输入
使用locator.fill()是填写表单字段最简单的方法。它将焦点放在元素上,并触发输入事件,输入文本。它适用于<input>、<textarea>和[contenteditable]元素。
可以使用 get_by_label
方法来定位具有特定标签(即 label 元素)的输入元素。
通常情况下,一个标签元素(<label>
)会与一个表单元素(如输入框、下拉列表、单选框等)相关联,通过 for
属性或将表单元素包含在标签内部的方式建立关联。这样,当用户单击标签时,关联的表单元素就会获得焦点。在自动化测试中,可以使用 get_by_label
方法来查找具有特定标签的表单元素,从而模拟用户操作。
需要注意的是,使用 get_by_label
方法前提是标签元素和表单元素之间需要正确建立了关联。如果标签元素没有与表单元素相关联,或者使用了其他方式建立关联(如 aria-labelledby
属性),则无法使用 get_by_label
方法来查找对应的表单元素。
复选框和单选按钮
使用 locator.set_checked()
是选中和取消选中复选框或单选按钮的最简单方法。此方法可用于 input[type=checkbox]
、input[type=radio]
和 [role=checkbox]
元素。
选择选项
使用 locator.select_option()
在 <select>
元素中选择一个或多个选项。您可以指定选项值或标签进行选择。可以选择多个选项。
鼠标点击
执行简单的鼠标点击操作。
在幕后,这个方法和其他与指针相关的方法:
等待具有给定选择器的元素出现在DOM中
等待它显示出来,即不为空,没有
display:none
,没有visibility:hidden
等待它停止移动,例如,直到 CSS 转换完成
滚动元素到视图中
等待它在操作点接收指针事件,例如等到元素不被其他元素遮挡
如果在上述任何检查期间元素被分离,则重试
强制点击(Forcing the click)
有时,应用程序使用复杂逻辑,悬停在元素上会将其覆盖另一个拦截点击的元素。这种行为与元素被覆盖并将点击派发到其他位置的错误不可区分。如果您知道正在发生这种情况,则可以绕过可操作性检查并强制点击:
程序化点击(Programmatic click)
如果您不想在真实条件下测试您的应用程序,并且想以任何可能的方式模拟点击,则可以通过使用 locator.dispatch_event()
在元素上触发 HTMLElement.click()
行为来触发点击事件:
输入字符
像真正的键盘一样,逐个字符地键入字段,使用locator.type()。
此方法将发出所有必要的键盘事件,所有的keydown、keyup和keypress事件都会有。你甚至可以指定可选的按键之间的延迟,以模拟真实的用户行为。
注意 大多数时候,page.fill()只需要正常工作。只有在页面上存在特殊的键盘处理时,才需要键入字符。
键和快捷键
locator.press()方法将选定的元素设置为焦点,并生成一个单独的按键。它接受键盘事件的keyboardEvent.key属性中发出的逻辑键名:
Backquote、Minus、Equal、Backslash、Backspace、Tab、Delete、Escape、 ArrowDown、End、Enter、Home、Insert、PageDown、PageUp、ArrowRight、 ArrowUp、F1 - F12、Digit0 - Digit9、KeyA - KeyZ等。
你也可以指定一个你想要生成的单个字符,如"a"或"#"。还支持以下修改快捷键:Shift、Control、Alt、Meta。简单版本产生一个单个字符。这个字符是大小写敏感的,所以"a"和"A"会产生不同的结果。
支持"Control+o"或"Control+Shift+T"等快捷键。当与修饰符一起指定时,修饰符被按下并保持按下状态,同时后续的键被按下。
请注意,你仍然需要指定Shift-A中的大写A来产生大写字符。Shift-a会产生一个小写字母,就像你切换了CapsLock一样。
上传文件
你可以使用locator.set_input_files()方法选择要上传的输入文件。它希望第一个参数指向类型为"file"的输入元素。可以在数组中传递多个文件。如果某些文件路径是相对的,它们相对于当前工作目录解析。空数组清除所选文件。
如果你没有手头上的输入元素(因为它是动态创建的),你可以处理 page.on("filechooser")
事件或者在你的操作上使用相应的等待方法:
聚焦元素
对于处理聚焦事件的动态页面,你可以使用 locator.focus()
聚焦到给定的元素。
拖放
你可以使用 locator.drag_to()
执行拖放操作。此方法将:
悬停将被拖动的元素。
按下鼠标左键。
将鼠标移动到将接收拖放的元素上。
释放鼠标左键。
手动拖放
如果你想精确控制拖放操作,请使用低级别的方法,如 locator.hover()
、mouse.down()
、mouse.move()
和 mouse.up()
。
注意:
如果你的页面依赖于 dragover
事件的触发,在所有浏览器中都需要至少两次鼠标移动才能触发它。为了可靠地发出第二个鼠标移动,请将你的 mouse.move()
或 locator.hover()
重复两次。操作序列应为:悬停拖动元素,按下鼠标,悬停放置元素,第二次悬停放置元素,释放鼠标。

每天来学习

如果觉得有帮助,点个赞呗