2016-07-12 87 views
0

假設我有一個用兩個步驟填寫表單的Nightwatch測試。作爲第一步的一部分,我需要動態查詢頁面中的一些數據(使用Selenium API),然後使用這些數據進行額外的硒調用,並使用最終結果來進行自定義斷言。我需要使用Selenium api的原因不是我不知道如何使用正常的Nightwatch斷言,而是正常的斷言不足以測試我想測試的事物的類型。此外,在第一步結束時單擊一個按鈕,移到表單的下一部分(準備第二步)。Nightwatch.js異步硒操作

(代碼版本):

module.exports = { 
    'Part 1': (client) => { 

    // ... do cool stuff 

    client.SOME_SELENIUM_COMMAND(...SOME_ARGS..., (result) => { 

     client.SOME_OTHER_SELENIUM_COMMAND(...SOME_OTHER_ARGS..., (result2) => { 
     // ... do more cool stuff with result2 
     }); 
    }); 

    // moves the page onto part 2 
    client.click(SOME_BUTTON); 
    }, 

    'Part 2': (client) => { 
    // ... part 2 stuff 
    } 
}; 

我的問題是這樣的:測試的硒命令結果部分結算前移動到第二部分。

我知道內部Nightwatch使用某種事件隊列和EventEmitters來確保命令按正確的順序執行,但看起來第一部分末尾的click命令正在排隊回調可以。

回答

5

可以使用Nightwatch perform command執行其他一些命令,並呼籲done()當你想測試繼續第2部分你會做這樣的事情:

module.exports = { 

    'Part 1': (client) => { 

    // ... do cool stuff 

    client 
    .perform(function(client, done) { 

     client.SOME_SELENIUM_COMMAND(...SOME_ARGS..., (result) => { 

      client.SOME_OTHER_SELENIUM_COMMAND(...SOME_OTHER_ARGS..., (result2) => { 
       // ... do more cool stuff with result2 
       // Call done to continue to Part 2 
       done(); 
      }); 
     }); 
    }) 
    // moves the page onto part 2 
    .click(SOME_BUTTON); 
    }, 

    'Part 2': (client) => { 
    // ... part 2 stuff 
    } 
}; 
+0

感謝您的回答!究竟是.perform命令應該用於什麼? (該文檔看起來不太具有描述性) – dwoodwardgb

+0

我會說,它基本上用於當你想要做一些API默認不支持或者你想執行異步操作的時候。 'Perform'可以用來運行任何javascript,或者調用API,因爲這個函數的第一個參數是瀏覽器對象。整潔的事情是,您可以控制要運行的操作,然後在您想要繼續執行下一步時調用'done()'函數。這是否解決了你的問題? –

+0

是的。目前我有很多抽象(使用承諾和頁面對象)。這將需要一些時間來弄清楚如何使用這種調用API的新方法... – dwoodwardgb