現象
Vue Cli 3 + Vue CLI Plugin Electron Builder環境でselenium-webdriverを使用した場合、次のようなエラーがでる。
Uncaught Error: Failed to import atoms module ./atoms/get-attribute.js. If running in dev mode, you need to run `bazel build //javascript/node/selenium-webdriver/lib/atoms:get-attribute.js` from the projectroot: Error: Cannot find module './atoms/get-attribute.js'
結論
node_modules/selenium-webdriver/lib/http.js
を次のように修正する。
- requireAtomを実行している部分の第一引数をファイル名だけにする
- requireAtom関数内でrequireしている部分にpathを追加する
修正前
const getAttribute = requireAtom(
'./atoms/get-attribute.js',
'//javascript/node/selenium-webdriver/lib/atoms:get-attribute.js');
const isDisplayed = requireAtom(
'./atoms/is-displayed.js',
'//javascript/node/selenium-webdriver/lib/atoms:is-displayed.js');
/**
* @param {string} module
* @param {string} bazelTarget
* @return {!Function}
*/
function requireAtom(module, bazelTarget) {
try {
return require(module);
} catch (ex) {
...
}
}
修正後
const getAttribute = requireAtom(
'get-attribute.js',
'//javascript/node/selenium-webdriver/lib/atoms:get-attribute.js');
const isDisplayed = requireAtom(
'is-displayed.js',
'//javascript/node/selenium-webdriver/lib/atoms:is-displayed.js');
/**
* @param {string} module
* @param {string} bazelTarget
* @return {!Function}
*/
function requireAtom(module, bazelTarget) {
try {
return require('./atoms/' + module);
} catch (ex) {
...
}
}
このように修正すると無事requireされて実行できます。
余談
ワクワクしてプルリクだそうとしたら先客がいました。くやしいぃ・・・
https://github.com/SeleniumHQ/selenium/pull/7726