如何测试导航菜单是否包含所有预期项目?

How to test if navigation menu has all expected items?

我正在使用 Nightwatch.js (Selenium/WebDriver) 来测试我的 Node.js 应用程序。

现在我想测试导航栏是否存在,我还想测试导航栏的项目是否符合预期。

这是我试图获取所有导航项的方法,但我不知道如何检查元素。我也认为这有点太复杂了。这是使用 Nightwatch.js 的正确方法吗?

module.exports = {
  'navigation': function(browser) {
    var navElements = []

    function getNavElements(elements) {
      elements.value.forEach(function(element) {
        browser.elementIdText(element.ELEMENT, function(res) {
          navElements.push(res.value)
        })
      })
    }

    browser
      .url(browser.launchUrl)
      .waitForElementVisible('#nav', 10000)

    browser.expect.element('#nav').to.be.present

    browser.elements('css selector', '#nav > .item', getNavElements)
    browser.expect(navElements).to.equal(['First', 'Second', 'Third'])

    browser.end()
  }
}

您的代码几乎是正确的,但这是您遗漏的:

  • getNavElements 是一个回调,所以当您在下一行测试它时,您不能确定 navElements 是否会按预期填充。
  • browser.expect 不是函数。它是一个包含 element 方法的简单对象。如果你想用 expect 执行常规测试,你将不得不直接使用 Chai(Nightwatch BDD 风格的界面基于这个库)。

这是一个最小的工作代码:

HTML (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Nightwatch</title>
</head>
<body>
  <ul id="nav">
    <li class="item">First</li>
    <li class="item">Second</li>
    <li class="item">Third</li>
  </ul>
</body>
</html>

JavaScript (nav.js)

var expect = require('chai').expect;

module.exports = {
  'Navigation': function (browser) {
    var expectedNavElements = ['First', 'Second', 'Third'];

    function testNavElements(elements) {
      elements.value.forEach(function (element, index) {
        browser.elementIdText(element.ELEMENT, function(res) {
          expect(res.value).to.equal(expectedNavElements[index]);
        });
      });
    }

    browser
      .url('http://localhost:8000/index.html') // Change this if needed
      .waitForElementVisible('#nav', 1000);

    browser.expect.element('#nav').to.be.present;
    browser.elements('css selector', '#nav > .item', testNavElements);

    browser.end();
  }
};

命令

  1. npm i chai 安装 Chai
  2. nightwatch -t tests/nav.js 到 运行 测试套件

注意: 如果 Chai 预期通过,您将不会在控制台中收到任何消息,因为这不是由 Nightwatch 本地处理的。但是如果它们没有通过,你会得到一个断言错误。尝试在 expectedNavElements 中输入错误的值,您会看到...