首页 > 解决方案 > 如何通过 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错误,一切都变得很糟糕。

标签: nightwatch

解决方案


在给它最后一枪之后,我设法用一个 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()

推荐阅读