nightwatch - 如何通过 Nightwatch 中的导航项测试重定向
问题描述
事不宜迟,我将切入正题:
我有一些iterated-item
作为 CSS 类的锚标签。我想要的只是遍历它们,单击它们并测试浏览器的重定向 url。
我试过使用elements
,但我得到了陈旧的错误:
Error while running .clickElement() protocol action: stale element reference: element is not attached to the page document
这实际上是有道理的。但是,我找不到任何方法来动态获取循环项目,遍历它们,单击第一个,检查 url,返回,单击第二个,检查 url,返回等等。
这是我的一小段守夜代码:
browser.url(browser.launchUrl)
browser.waitForElementVisible('#my-whatever-container')
browser
.elements('css selector', '.iterated-item', function (links) {
links.value.forEach((link) => {
browser.pause(1000)
browser.elementIdClick(link.ELEMENT)
browser.waitForElementVisible('#my-whatever-element')
browser
.expect.url().to.contain('something-in-the-url')
browser
.back()
})
})
browser.end()
这适用于第一次迭代,但是当它返回时,我得到了stale
错误,一切都变得很糟糕。
解决方案
在给它最后一枪之后,我设法用一个 hacky 解决方案做到了,但是,嘿,它奏效了!
browser.url(browser.launchUrl)
browser.waitForElementVisible('#my-whatever-container')
browser.elements('css selector', '.iterated-item', function (links) {
// get dynamically the length of the iterated items
// and just use the index for the rest of the code
const linksLength = links.value.length
for (let i = 0; i < linksLength; i++) {
browser.waitForElementVisible('#my-whatever-container')
// with every iteration, refresh the iterated items
// which are bound to the current page view
browser.elements('css selector', '.iterated-item', function (linksRenewed) {
browser.elementIdClick(linksRenewed.value[i].ELEMENT)
browser.waitForElementVisible('#my-whatever-element')
browser.expect.url().to.contain('something-in-the-url')
browser.back()
})
}
})
browser.end()
推荐阅读
- visual-c++ - 与 irrklang::ISound 一起使用时不会播放 irrklang 声音
- proc-r-package - 我可以使用响应率而不是原始数据作为 ROC 的输入吗?
- python - 如何并行化返回 lambda 的函数
- python - 将 Python 脚本 (DHT22 - CircuitPython) 与 (RPLCD) 结合起来,在 RPi 上的 1602 LCD 上进行温度读数
- swift - 根据字符串返回颜色
- c# - 在运行时修改 appSettings 而不写入磁盘
- java - 未在 PubSub 模拟器中创建主题
- python - Pandas DataFrame - 根据其他列的值填充列的 NaN
- php - 防止跨域访问服务器并注销用户
- javascript - 如何在调用简化函数的函数中使用参数