0

我正在尝试在 Nashorn 上运行 selenium-js(请不要问我为什么不能使用 java 版本的 selenium)。

Nashorn(在 java8 上)实现了 ES5。用 ES6 编写的当前版本的 selenium-webdriver (3.6.0)。

我正在尝试使用 webpack(v4) + babel-polyfill(v6.26.0) + babel-preset-env (1.6.1 预设 es2015) 转换 selenium-webdriver。

然后在 Nashorn 上运行代码。但是得到一个错误

TypeError: Cannot redefine property "name" of function By(using, value) {
_classCallCheck(this, By);

/** @type {string} */
this.using = using;

/** @type {string} */
this.value = value;}

in webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js? at line number 89
at defineProperty (webpack:///./node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js?:89)
at defineProperties (webpack:///./node_modules/selenium-webdriver/lib/by.js?:49)
at <anonymous> (webpack:///./node_modules/selenium-webdriver/lib/by.js?:49)
at By (webpack:///./node_modules/selenium-webdriver/lib/by.js?:157)
at <program> (webpack:///./node_modules/selenium-webdriver/lib/by.js?:132)
at <anonymous> (<eval>:7024)
at __webpack_require__ (<eval>:20)
at <program> (webpack:///./node_modules/selenium-webdriver/lib/webdriver.js?:37)
at <anonymous> (<eval>:7180)
at __webpack_require__ (<eval>:20)
at <program> (webpack:///./node_modules/selenium-webdriver/lib/http.js?:43)
at <anonymous> (<eval>:7096)
at __webpack_require__ (<eval>:20)
at <anonymous> (webpack:///./node_modules/selenium-webdriver/http/index.js?:33)
at <program> (webpack:///./node_modules/selenium-webdriver/http/index.js?:264)
at <anonymous> (<eval>:6904)
at __webpack_require__ (<eval>:20)
at <anonymous> (webpack:///./node_modules/selenium-webdriver/chrome.js?:146)
at <program> (webpack:///./node_modules/selenium-webdriver/chrome.js?:941)
at <anonymous> (<eval>:6832)
at __webpack_require__ (<eval>:20)
at <anonymous> (webpack:///./node_modules/selenium-webdriver/index.js?:35)
at <program> (webpack:///./node_modules/selenium-webdriver/index.js?:816)
at <anonymous> (<eval>:6940)

真的很感激任何提示:)

4

1 回答 1

0

问题是这一行:https ://github.com/SeleniumHQ/selenium/blob/807b4f560f36a0380d54b03c79c6eaaf45287c73/javascript/node/selenium-webdriver/lib/by.js#L201

static name(name) {

具体来说,在 ES5 中name,函数的属性并未由规范定义,但几乎所有 JS 引擎都包含它并将其标记为不可配置。这意味着上面的行将引发异常,因为它试图分配给以fn.name = ...创建静态,这是不可能的。

这适用于 ES6 环境,因为该属性已更改为标记为可配置,但在较旧的环境中,我认为除了编写自己的 Babel 插件来完全删除该静态属性之外,您没有其他选择。Babel 本身无法为您处理这个问题。

于 2018-04-19T16:19:21.630 回答