javascript - 为什么我在使用 Selenium-webdriver 运行测试时不断收到“UnhandledPromiseRejectionWarning”?
问题描述
我正在尝试在我的前端使用和不使用 mocha 的 Selenium 测试,在我构建的 i React 应用程序上。但我不断收到错误。摩卡咖啡运行所以硒有问题吗?
在具有以下版本的 MacOS 上:
"mocha": "^6.2.2",
"selenium-webdriver": "^4.0.0-alpha.5"
"geckodriver": "^1.19.1",
"safari": "0.0.1"
这只是一个开始,一个非常简单的返回应用程序标题的测试。
该应用程序已启动并运行http://localhost:3000/
我尝试过不同的浏览器;火狐和野生动物园。它们都打开了,但它们都(最终)返回相同的错误。
在 test/src 中运行测试node SimpleTest.js
这是 SimpleTest.js
var webdriver = require("selenium-webdriver");
const serverUri = "http://localhost:3000";
var browser = new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.firefox())
.build();
browser.get(serverUri);
browser.getTitle()
.then(function (title) {
console.log("The title", title);
});
browser.quit();
我期望的输出
$ node SimpleTest.js
The title Me-Me-Me
但我得到了
$ node SimpleTest.js
The title
(node:1582) UnhandledPromiseRejectionWarning: NoSuchSessionError: Tried to run command without establishing a connection
at Object.throwDecodedError (/$HOME/jsramverk/node_modules/selenium-webdriver/lib/error.js:550:15)
at parseHttpResponse (/$HOME/jsramverk/node_modules/selenium-webdriver/lib/http.js:563:13)
at Executor.execute (//$HOME/jsramverk/node_modules/selenium-webdriver/lib/http.js:489:26)
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:1582) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:1582) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
解决 了我有太多异步代码运行同步。
const { Builder } = require('selenium-webdriver');
const Firefox = require('selenium-webdriver/firefox');
require('geckodriver');
const serverUri = "http://localhost:3000/#";
let browser;
async function main() {
const builder = new Builder().forBrowser('firefox');
builder.setFirefoxOptions(new Firefox.Options().headless());
browser = await builder.build();
await browser.get(serverUri);
try {
const title = await browser.getTitle();
console.log(title);
} catch (ex) {
console.log("Something went wrong", ex.message);
} finally {
await browser.quit();
}
}
main().catch(console.error);
解决方案
推荐阅读
- php - 如何从 foreach 循环的值中声明两个变量
- css - Safari 的 CSS 网格和溢出问题
- python - 从由中间模型连接的模型中获取数据
- c++ - ASIO signal_set 对于多个 IO 线程不可靠,取决于代码顺序?
- gis - 计算旅程
- java - 使用 SpringBoot 重命名 LDAP 中的记录 dn
- java - 我们可以在java中附加两个excel表吗?
- git - git:使用 git-flow 一段时间后,将 master 重命名为 release
- python - html QNA 解析器——Python
- sql - 如何从一张表中的 2 列计算到新表中?PostgreSQL