簡體   English   中英

使用 selenium webdriverjs 運行 mocha 測試時調用堆棧不是很有幫助

[英]Not very helpful callstack when running a mocha test using selenium webdriverjs

當使用 selenium webdriver for JavaScript 在 mocha 中運行測試時,調用堆棧並不是很有幫助。

作為一個簡單的例子,我使用了以下簡單的測試腳本test.js

var webdriver = require('selenium-webdriver'),
    test = require('selenium-webdriver/testing');

const TIMEOUT = 30000;

test.describe('selenium webdriverjs', function () {
    var driver;

    this.timeout(TIMEOUT);

    test.before(function () {
        driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.firefox()).build();
        driver.manage().timeouts().pageLoadTimeout(TIMEOUT);
    });

    test.after(function () {
        driver.quit();
    });

    test.it('error stack', function () {
        driver.get('http://www.google.com');
        driver.findElement(webdriver.By.id('doesnotexit'));
    });
});

當(例如)從 Gulp 運行時會生成以下錯誤堆棧:

  selenium webdriverjs
    1) error stack


  0 passing (4s)
  1 failing

  1) selenium webdriverjs error stack:
     NoSuchElementError: Unable to locate element: {"method":"id","selector":"doesnotexit"}
      at new bot.Error (...\node_modules\selenium-webdriver\lib\atoms\error.js:108:18)
      at Object.bot.response.checkResponse (...\node_modules\selenium-webdriver\lib\atoms\response.js:109:9)
      at ...\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:379:20
      at promise.Promise.goog.defineClass.invokeCallback_ (.../node_modules/selenium-webdriver/lib/goog/../webdriver/promise.
js:1337:14)
      at promise.ControlFlow.goog.defineClass.goog.defineClass.abort_.error.executeNext_.execute_ (.../node_modules/selenium-
webdriver/lib/goog/../webdriver/promise.js:2776:14)
      at promise.ControlFlow.goog.defineClass.goog.defineClass.abort_.error.executeNext_ (.../node_modules/selenium-webdriver
/lib/goog/../webdriver/promise.js:2758:21)
      at goog.async.run.processWorkQueue (...\node_modules\selenium-webdriver\lib\goog\async\run.js:124:15)
  From: Task: selenium webdriverjs error stack
      at Context.ret (...\node_modules\selenium-webdriver\testing\index.js:128:10)
      at callFnAsync (...\node_modules\mocha\lib\runnable.js:306:8)
      at Test.Runnable.run (...\node_modules\mocha\lib\runnable.js:261:7)
      at Runner.runTest (...\node_modules\mocha\lib\runner.js:421:10)
      at ...\node_modules\mocha\lib\runner.js:528:12
      at next (...\node_modules\mocha\lib\runner.js:341:14)
      at ...\node_modules\mocha\lib\runner.js:351:7
      at next (...\node_modules\mocha\lib\runner.js:283:14)
      at Immediate._onImmediate (...\node_modules\mocha\lib\runner.js:319:5)

該堆棧由本地node_modules目錄的mochaselenium庫中的一系列深度嵌套函數組成,實際測試腳本test.js甚至不屬於堆棧的一部分。

我想知道,如果我做錯了什么,這是否真的是我可以從這個設置中獲得的最佳信息?

是的,對於所有無意義的異步回溯,這確實是太多不必要且沒有真正有用的信息,但其中最重要的部分,即 webdriver 錯誤本身,位於最重要的部分,並且非常具有自我描述性

NoSuchElementError:無法定位元素:{"method":"id","selector":"doesnotexit"}

您可以嘗試在mocha-clean包的幫助下mocha-clean輸出。 應用時,它應該真正留下錯誤消息本身,並且只保留堆棧跟蹤的相關部分,消除所有mocha - 和selenium-webdriver -specific:

Mocha 堆棧跟蹤中充斥着您不想看到的幀,例如來自模塊和 Mocha 內部的代碼。 它剝離了 mocha 內部結構、node_modules、絕對路徑(基於 cwd)和其他不必要的雜物。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM