欢迎光临散文网 会员登陆 & 注册

Playwright元素实战操作

2023-03-09 10:19 作者:慧测  | 我要投稿

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() 执行拖放操作。此方法将:

  1. 悬停将被拖动的元素。

  2. 按下鼠标左键。

  3. 将鼠标移动到将接收拖放的元素上。

  4. 释放鼠标左键。

手动拖放

如果你想精确控制拖放操作,请使用低级别的方法,如 locator.hover()mouse.down()mouse.move()mouse.up()

注意:

如果你的页面依赖于 dragover 事件的触发,在所有浏览器中都需要至少两次鼠标移动才能触发它。为了可靠地发出第二个鼠标移动,请将你的 mouse.move()locator.hover() 重复两次。操作序列应为:悬停拖动元素,按下鼠标,悬停放置元素,第二次悬停放置元素,释放鼠标。

每天来学习

视频号直播进行中

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

Playwright元素实战操作的评论 (共 条)

分享到微博请遵守国家法律