nw.js chromedriver不会从项目文件夹外部运行

时间:2019-03-22 16:32:11

标签: selenium selenium-chromedriver nw.js

我正尝试使用selenium-python和chromedriver在基于nw.js的应用程序上设置自动化测试,出于实际原因(频繁重新安装...),我想将chromedriver与另一个文件夹中的其余文件分开。仅当chromedriver与项目的其余部分位于同一文件夹(以及nw.exe)时,我的测试才有效。如果我尝试将其放置在其他任何地方,并分别使用“ binary_location”,“ chrome_driver_binary”和“ add_argument”更改路径,那么我总是会遇到诸如

的异常
  

selenium.common.exceptions.WebDriverException:消息:未知错误:   找不到Chrome二进制文件

  

selenium.common.exceptions.WebDriverException:消息:未知错误:   无法创建Chrome进程

Nw.js documentation并没有帮助,因为它只显示以下内容:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("nwapp=/path/to/your/app")

driver = webdriver.Chrome(executable_path='/path/to/nwjs/chromedriver', chrome_options=chrome_options)

提前感谢任何想法。

1 个答案:

答案 0 :(得分:0)

我能够做到这一点,但我使用了 ruby​​。应该可以翻译成python。

此外,我正在运行 Ubuntu 20.04。不知道这是否都适用于 Windows。

<块引用>

chrome_options.add_argument("nwapp=/path/to/your/app")

这一行没有指定,但 nwapp 应该是一个目录。 如果您使用 phoenix builder 构建您的应用程序,那么您可能在 package.json 中有这样一行:

"package:linux": "npm run build:prod && build --tasks linux-x64 --mirror https://dl.nwjs.io/ .",

对我来说,这个命令会创建一个名为 packages/myapp-0.0.1-linux-x64 的目录 在那里你应该看到一个可执行文件“myapp”和清单“package.json”

nwapp= 行应该指向这个目录。它将使用清单文件来获取应用程序名称。在 ruby​​ 中看起来像这样:

myapp_dir   = File.join(root_dir, 'packages', 'myapp-0.0.1-linux-x64')
chrome_options.add_argument("nwapp=" + myapp_dir)
<块引用>

executable_path='/path/to/nwjs/chromedriver'

当你使用 npm 安装 nw.js 时,它会创建一个目录树: node_modules/nw/nwjs 在该目录中是 chromedriver 可执行文件。

“executable_path”是 chromedriver 可执行文件的完整路径。在 ruby​​ 中,它看起来像这样:

chromedriver_path = File.join(root_dir, 'node_modules', 'nw', 'nwjs', 'chromedriver')
Selenium::WebDriver::Chrome::Service.driver_path = chromedriver_path
@driver = Selenium::WebDriver.for :chrome, options: chrome_options

Ruby 会执行与您调用它的位置相关的所有工作,因此我在我的 nw.js 应用程序的根目录中添加了一个脚本,然后将此行添加到 package.json 中:

"e2e": "ruby ./e2e.rb"

然后通过 npm run e2e

运行