前一篇利用 Nightwatch.js 的 pause()
,并透过 global 设定了不同的等待时间。例如 pauseLogin()
, pauseSearch()
等方法。不过由於这个专案是利用 Gitlab 的 CI/CD 并串接 BrowserStack,因此实际在执行等待的时间会与本机开发不尽相同,除此之外,测试的目标网站也有可能分 dev/staging,如果 server 规格不同,也有可能造成等待时间的问题。如果只是多等一段时间还好,但如果等不够久就会造成错误。
Nightwatch 中有提供主要两种模式
visible()
是物件仍会存在,但 display 为 none 或 hiddenpresent()
是物件直接被移除如果加上 not 就会总共有四种指令可以使用
waitForElementVisible()
waitForElementNotVisible()
waitForElementPresent()
waitForElementNotPresent()
使用方法皆相同,都是:
browser.waitForElementVisible([using], selector, [timeout], [callback], [message]);
如果载入动画是像这样,且显示完後 snackbar 会被修改成 display: none;
,则可以写成:
browser.waitForElementNotVisible(
'[class="MuiSnackbar-root MuiSnackbar-anchorOriginTopCenter"]',
5000,
);
如果 snackbar 会被移除,则可以写成像这样:
browser.waitForElementNotPresent(
'[class="MuiSnackbar-root MuiSnackbar-anchorOriginTopCenter"]',
10000,
);
透过以上方法就可以最多等待 10 秒。如果资料在这时间内载入完成,snackbar 也被移除,就可以在 10 秒之内进入下一个测试。如此一来不仅比 pause(10000)
更有效率,也使测试更有弹性。
前面有提到透过设定 timeout 可以决定要等待多久,例如前面例子所举的 10 秒钟,不过如果每次都要打一次,就变得比较麻烦。
因此 Nightwatch 有提供 waitForConditionPollInterval
一次设定等待时间 (ms):
const nightwatchConfig = {
waitForConditionTimeout: 10000,
}
使用 waitForElementPresent
加上时间、selector 整体看上去会很长,因此可以变成:
// commands.js
module.exports = {
command: async function() {
this.waitForElementNotPresent(
'[class="MuiSnackbar-root MuiSnackbar-anchorOriginTopCenter"]',
10000,
);
},
};
browser.waitSnackbar()
这篇大致说明了 Nightwatch 中比较好的等待方法,像是 waitForElementPresent()
, waitForElementVisible()
,并介绍透过 nightwatch 的 config 设定基本的 timeout。最後则是说明可以利用客制化方式,让测试档案更容易看懂,也透过共用指令可以一次调整多个档案。不过 waitForElementVisible()
这方法其实有一个缺陷,下一篇再来说明实际案例与原因~
<<: [DAY 12] _三轴感测器读取函示讲解 (ADXL345)
>>: #10 实作篇 — 使用 SWR 抓取和 Cache 资料
要作Alpine的新平台porting,其实在有了 aports/script/bootstrap....
今天要继续讲一下GraphQL(Hasura)里面的一个小功能 - Event Trigger。 会...
Use Case 定义对外唯一的 method call 利用 dry-monads 的特性处理预期...
引言 今天来解逆向工程的题目吧! 逆向工程 听起来好像很厉害,但其实就是一种过程而已。 [维基百科...
先让子弹打到敌机,可以让敌机受伤.毁坏,那首先给敌机一个受伤的动画,这次就用Animation创造一...