1

我使用Nightwatch.js(硒/ 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() 
    } 
} 

回答

0

你的代碼幾乎是正確的,但是這是你錯過了什麼:

  • getNavElements是一個回調,所以你不能確保預期當你測試它的下一個navElements將填充線。
  • browser.expect不是一個函數。它是含有element方法的簡單對象。如果您想用expect執行常規測試,則必須直接使用Chai(Nightwatch BDD-style界面基於此庫)。

這裏是一個最小的工作代碼:

HTML的index.html

​​

的JavaScriptnav.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安裝柴
  2. nightwatch -t tests/nav.js運行測試套件

注:如果柴期望通過,你不會得到在控制檯的任何消息因爲這不是Nightwatch本身所處理的。但是,如果他們不通過,你會得到一個斷言錯誤。嘗試在expectedNavElements中輸入錯誤的值,您將看到...

相關問題