我们知道 UI 自动化稳定性是最差的,并且会由于各种原因而失败。为了使UI自动化更稳定,最常见的方法是

  • 编写规范的代码

  • 加入等待机制

  • 添加失败处理机制(如:失败重试)

来源于网络

Playwright在执行脚本之前对元素执行一系列可操作性校验,以确保这些执行按预期进行。它会自动等待所有相关校验通过,然后才执行请求的操作。如果所需的校验未在给定范围内通过,则操作失败并显示TimeoutError

playwright可操作性校验包括以下几点:

  • 元素加载DOM完成

  • 元素可见

  • 元素是稳定的

  • 元素没有被其他元素遮挡

  • 元素已启用

以下是经过可操作性校验的所有操作的详细校验列表

01 强制操作

Page.click()这样的一些操作支持force选项,该选项禁用非必要的可操作性检查,例如,将force传递给Page.click()方法将不会检查目标元素是否实际接收到单击事件。即强制点击,不会等待。

02 断言

你也可以使用以下方法检查元素的可操作性状态。需要注意的是ElementHandle表示页内 DOM元素。ElementHandles 可以使用

Page.querySelector()方法创建。不过,官方提示不鼓励使用 ElementHandle,而是使用Locator对象和网络优先断言。

元素是否被选中

ElementHandle.isChecked()
Page.isChecked()
Locator.isChecked()

ElementHandle hrefElementLabel = page.querySelector("#c1");
hrefElementLabel.click();
boolean lableChecked = hrefElementLabel.isChecked();
System.out.println("A B C D 是否选中:"+ lableChecked);// 返回true

page.getByLabel("abcd").check();// 点击勾选
System.out.println("abcd 已勾选:"+ page.isChecked("#c1"));//返回true
page.getByLabel("abcd").uncheck();// 点击取消勾选
System.out.println("abcd 未勾选:"+ page.isChecked("#c1"));//返回false

page.getByLabel("abcd").check();// 点击勾选
System.out.println("abcd 已勾选:"+ page.locator("#c1").isChecked());//返回true
page.getByLabel("abcd").uncheck();// 点击取消勾选
System.out.println("abcd 未勾选:"+ page.locator("#c1").isChecked());//返回false

元素是否启用


ElementHandle.isEnabled()
ElementHandle.isDisabled()
Page.isEnabled()
Page.isDisabled()
Locator.isEnabled()
Locator.isDisabled()

ElementHandle elementButtonEnabledOrHidden = page.querySelector("#disabledButton");
boolean buttonEnabled = elementButtonEnabledOrHidden.isEnabled();
System.out.println("Disabled Button元素已启用:"+buttonEnabled);//返回false
boolean buttonDisabled = elementButtonEnabledOrHidden.isDisabled();
System.out.println("Disabled Button元素已禁用:"+buttonDisabled);//返回true

System.out.println("Disabled Button元素已启用:"+page.isEnabled("#disabledButton"));//返回false
System.out.println("Disabled Button元素已禁用:"+page.isDisabled("#disabledButton"));//返回true

System.out.println("Disabled Button元素已启用:"+page.locator("#disabledButton").isEnabled());//返回false
System.out.println("Disabled Button元素已禁用:"+page.locator("#disabledButton").isDisabled());//返回true

元素是否可编辑


ElementHandle.isEditable()
Page.isEditable()
Locator.isEditable()

// Username输入框是否可编辑
ElementHandle hrefElementNameInput = page.querySelector("body > label:nth-child(2) > input[type=textbox]");
boolean nameInputEditable = hrefElementNameInput.isEditable();
System.out.println("Username输入框是否可编辑:"+nameInputEditable);//返回false
System.out.println("Username输入框是否可编辑:"+ page.isEditable("body > label:nth-child(2) > input[type=textbox]"));//返回true

// Username输入框是否可编辑
System.out.println("Username输入框是否可编辑:"+ page.locator("body > label:nth-child(2) > input[type=textbox]").isEditable());//返回true

元素是否可见


ElementHandle.isVisible()
ElementHandle.isHidden()
Page.isVisible()
Page.isHidden()
Locator.isVisible()
Locator.isHidden()

// 点击 Visibility hidden 按钮
ElementHandle hrefElement = page.querySelector("body > form > input[type=button]:nth-child(7)");
hrefElement.click();
// 校验元素是否可见
ElementHandle hrefElementButtonVisible = page.querySelector("#uv");
boolean buttonVisivle = hrefElementButtonVisible.isVisible();
System.out.println("using visibility元素可见:"+buttonVisivle);//返回false
boolean buttonHidden = hrefElementButtonVisible.isHidden();
System.out.println("using visibility元素不可见:"+buttonHidden);//返回true

// 点击 Visibility hidden 按钮
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Visibility hidden")).click();
// 校验元素是否可见
System.out.println("using visibility元素可见:"+page.isVisible("#uv"));//返回false
System.out.println("using visibility元素不可见:"+page.isHidden("#uv"));//返回true

// 点击 Visibility hidden 按钮
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Visibility hidden")).click();
// 校验元素是否可见
System.out.println("using visibility元素可见:"+page.locator("#uv").isVisible());//返回false
System.out.println("using visibility元素不可见:"+page.locator("#uv").isHidden());//返回true

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

图片

整套资料获取

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐