概觀

在開發網站時,您可能會在程式碼中放入一些 console.log 陳述式以協助偵錯,然後忘記移除這些陳述式。現在,您想要查看記錄到網站不同頁面 DevTools 主控台的所有主控台訊息。

或者,您可能在測試網站時故意放入這些主控台陳述式,以查看是否在瀏覽器中取得正確的資料。現在,您可以使用 Nightwatch 自動化此程序。

由於 Selenium 4 現在提供 Chrome DevTools 通訊協定支援,Nightwatch 現在支援擷取記錄到瀏覽器 DevTools 主控台的主控台訊息。

此命令僅適用於以 Chromium 為基礎的瀏覽器,例如 Google Chrome 和 Microsoft Edge。

擷取主控台訊息

擷取記錄到瀏覽器 DevTools 主控台的主控台訊息,可讓您在測試本身中存取這些訊息,您可以在其中檢查是否在瀏覽器中取得預期的資料,或程式碼中是否有不應記錄到瀏覽器主控台的任何意外主控台陳述式。

您只需在導覽至網站之前,使用必要的參數呼叫 browser.captureBrowserConsoleLogs() 命令即可。

captureBrowserConsoleLogs() 接受回呼函式,每當記錄新的主控台訊息時,該函式都會收到 event 物件作為引數。接收到的 event 物件規格如下

名稱 類型 描述
類型 string 呼叫的類型。
例如:logdebuginfoerror 等。
timestamp number 記錄主控台訊息的時間。
args
array[object] 物件的 value 屬性包含記錄。
例如:用法:args[0].value
如需有關物件規格的詳細資訊,請參閱這裡

範例

tests/capture-console-messages.js
describe('capture console events', function() {
  it('captures and logs console.log event', function() {
    browser
      .captureBrowserConsoleLogs((event) => {
        console.log(event.type, event.timestamp, event.args[0].value);
      })
      .navigateTo('https://www.google.com')
      .executeScript(function() {
        console.log('here');
      }, []);
  });
});

上述範例的輸出

  Running Capture console messages:
───────────────────────────────────────────────────────────────────────────────────────────────────
error 2022-06-10T13:38:22.082Z here
No assertions ran.