无法使用selenium hub docker和ruby watir更改chrome的默认下载目录

问题描述 投票:1回答:3

经过几天的搜索和试验我可以在网上找到的任何解决方案后,我放弃了,并希望得到社区的一些帮助。

Ruby gem(ruby 2.5.1):

watir 6.11.0
selenium-webdriver 3.4.1

泊坞窗:

selenium/node-chrome-debug:3.14
selenium/hub:3.14

我的红宝石代码:

prefs = {
    download: {
        prompt_for_download: false,
        default_directory: download_directory
    }
}
browser = Watir::Browser.new(:chrome, url: selenium_hub_url, options: {prefs: prefs})

我们的设置是:

  1. 运行selenium / hub和selenium / node-chrome-debug。可能不同的是我们将基本操作系统的/ tmp作为/ hosttmp / tmp挂载在节点容器中
  2. 使selenium / node-chrome-debug与selenium / hub进行对话
  3. 使用上面提供的代码使浏览器自动化与selenium / hub对话

问题是我永远无法设置默认下载目录。但是,所有其他部分都正常工作。尽管有默认的下载目录设置,VNC窗口仍显示浏览器正常工作。它总是/ home / seluser / Downloads

我尝试过的事情:

  1. 其他人的想法,例如指定选项和偏好的不同方式。 (例如使用功能)
  2. 与Docker安全相关的设置,例如:--privileged --security-opt apparmor:unconfined --cap-add SYS_ADMIN
  3. 在基本操作系统上,chmod 777用于download_directory。 download_directory,例如基本操作系统上的/tmp/tmp.123,它作为/hosttmp/tmp/tmp.123安装在chrome节点容器中,我可以看到它,并在这个文件夹中进行一些读/写操作在容器内或基础OS上
  4. 在创建Hash对象时调整有趣的ruby符号/字符串。

有没有人对可能导致这种情况的原因有更多的想法?我还能尝试什么?是否有我可以参考的日志。运行代码时没有错误或警告。提前致谢。

ruby selenium docker watir
3个回答
1
投票

你定义了options = Selenium::WebDriver::Chrome::Options.new吗?

我们用

options = Selenium::WebDriver::Chrome::Options.new
prefs = {
  prompt_for_download: false,
  default_directory: download_directory
}
options.add_preference(download: prefs)

然后你会想要类似的东西

browser = Watir::Browser.new(:chrome, url: selenium_hub_url, options: options)

但也许主要的问题只是你使用options: {prefs: prefs}而不是options: {download: prefs}


0
投票

好的,通过深入研究Watir和Selenium-Webdriver的源代码,我想我知道'根本原因'。

我创建了一个问题,因为我不确定这是一个错误还是一个'功能'The issue

另外,我在watir / capabilities.rb中有一个解决方法:

更改

@selenium_browser = browser == :remote || options[:url] ? :remote : browser

@selenium_browser = browser == :remote ? :remote : browser

这不应该是最终解决方案,因为它可能不是一个好主意。将等待Watir人对此的评论。


0
投票

我正在使用Java + Docker + Selenium + Chrome进行自动化测试,并且遇到了类似的问题。请在下面找到我的解决方案并尝试它是否适用于您的情况。

  1. 不要在选项中设置默认下载目录,只需保留“/ home / seluser / Downloads”即可。
  2. 当你在docker上启动chrome节点时,请添加可以将下载的文件传输到所需目录的卷参数。

例如docker run -d-5900:5900 --link myhub:hub -v:/ home / seluser / Downloads selenium / node-chrome-debug:3.14.0

在我的例子中,JDK环境和我的测试脚本在Linux机器上,而selenium webdriver和浏览器都在docker上,所以一旦浏览器下载的文件无法直接保存在Linux机器上,你必须默认挂载本地目录docker上的目录。然后,您可以找到保存在所需目录中的文件。感谢和问候!景

© www.soinside.com 2019 - 2024. All rights reserved.