新一代最强开源UI自动化测试神器Playwright(Java版)五(自动等待)
我们知道 UI 自动化稳定性是最差的,并且会由于各种原因而失败。为了使UI自动化更稳定,最常见的方法是编写规范的代码加入等待机制添加失败处理机制(如:失败重试)
我们知道 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%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
整套资料获取
更多推荐
所有评论(0)