我正尝试使用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)
提前感谢任何想法。
答案 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