无法使用 selenium hub docker 和 ruby watir 更改 chrome 的默认下载目录
Not able to change default download directory for chrome with selenium hub docker and ruby watir
经过几天的搜索和试验我可以在网上找到的任何解决方案后,我放弃了,想从社区获得一些帮助。
Ruby 宝石 (ruby 2.5.1):
watir 6.11.0
selenium-webdriver 3.4.1
Docker:
selenium/node-chrome-debug:3.14
selenium/hub:3.14
我的ruby代码:
prefs = {
download: {
prompt_for_download: false,
default_directory: download_directory
}
}
browser = Watir::Browser.new(:chrome, url: selenium_hub_url, options: {prefs: prefs})
我们的设置是:
- 运行 一个 selenium/hub 和一个 selenium/node-chrome-debug。可能有所不同的是,我们将基础 OS 的 /tmp 安装为节点容器 /hosttmp/tmp 中的
- 让 selenium/node-chrome-debug 与 selenium/hub
对话
- 使用上面提供的代码让浏览器自动化与 selenium/hub 对话
问题是我一直无法设置默认下载目录。但是,所有其他部分都正常工作。 VNC window 显示浏览器在默认下载目录设置下工作正常。它总是 /home/seluser/Downloads
我尝试过的事情:
- 其他人的想法,例如指定选项和偏好的不同方式。 (例如使用功能)
- Docker 安全相关设置如:--privileged --security-opt apparmor:unconfined --cap-add SYS_ADMIN
- 在基础 OS 上,download_directory 的 chmod 777。 download_directory,比如base OS上的/tmp/tmp.123,在chrome节点容器中挂载为/hosttmp/tmp/tmp.123,我可以看到它并在容器内或基础 OS
上的这个文件夹中进行一些 read/write 操作
- 在创建哈希对象时调整有趣的 ruby symbol/string 内容。
有没有人对可能导致这种情况的原因有更多想法?我还能尝试什么?有没有我可以参考的日志。 运行 代码时没有错误或警告。提前致谢。
你定义了吗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}
好的,通过深入研究 Watir 和 Selenium-Webdriver 的源代码,我想我知道 'root cause'。
我创建了一个问题,因为我不确定这是错误还是 'feature' The issue
此外,我在 watir/capabilities.rb:
中有一个针对我的案例的解决方法
改变
@selenium_browser = browser == :remote || options[:url] ? :remote : browser
至
@selenium_browser = browser == :remote ? :remote : browser
这不应该是最终解决方案,因为它可能不是一个好主意。将等待 Watir 人对此的看法。
我正在使用 Java+Docker+Selenium+Chrome 进行自动化测试,也遇到了类似的问题。请在下面找到我的解决方案并尝试它是否适合您的情况。
- 不要在选项中设置默认下载目录,只需保留“/home/seluser/Downloads”即可。
- 当您在docker上启动chrome节点时,请添加可以将下载的文件传输到您想要的目录的卷参数。
例如docker 运行 -d -p 5900:5900 --link myhub:hub -v :/home/seluser/Downloads selenium/node-chrome-debug:3.14.0
在我的例子中,JDK 环境和我的测试脚本在 Linux 机器上,而 selenium webdriver 和浏览器都在 docker 上,所以一旦浏览器下载了文件它不能直接保存在 Linux 机器上,你必须在 docker 上使用默认目录挂载本地目录。然后你就可以找到保存在你想要的目录中的文件。
感谢和问候!
静
经过几天的搜索和试验我可以在网上找到的任何解决方案后,我放弃了,想从社区获得一些帮助。
Ruby 宝石 (ruby 2.5.1):
watir 6.11.0
selenium-webdriver 3.4.1
Docker:
selenium/node-chrome-debug:3.14
selenium/hub:3.14
我的ruby代码:
prefs = {
download: {
prompt_for_download: false,
default_directory: download_directory
}
}
browser = Watir::Browser.new(:chrome, url: selenium_hub_url, options: {prefs: prefs})
我们的设置是:
- 运行 一个 selenium/hub 和一个 selenium/node-chrome-debug。可能有所不同的是,我们将基础 OS 的 /tmp 安装为节点容器 /hosttmp/tmp 中的
- 让 selenium/node-chrome-debug 与 selenium/hub 对话
- 使用上面提供的代码让浏览器自动化与 selenium/hub 对话
问题是我一直无法设置默认下载目录。但是,所有其他部分都正常工作。 VNC window 显示浏览器在默认下载目录设置下工作正常。它总是 /home/seluser/Downloads
我尝试过的事情:
- 其他人的想法,例如指定选项和偏好的不同方式。 (例如使用功能)
- Docker 安全相关设置如:--privileged --security-opt apparmor:unconfined --cap-add SYS_ADMIN
- 在基础 OS 上,download_directory 的 chmod 777。 download_directory,比如base OS上的/tmp/tmp.123,在chrome节点容器中挂载为/hosttmp/tmp/tmp.123,我可以看到它并在容器内或基础 OS 上的这个文件夹中进行一些 read/write 操作
- 在创建哈希对象时调整有趣的 ruby symbol/string 内容。
有没有人对可能导致这种情况的原因有更多想法?我还能尝试什么?有没有我可以参考的日志。 运行 代码时没有错误或警告。提前致谢。
你定义了吗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}
好的,通过深入研究 Watir 和 Selenium-Webdriver 的源代码,我想我知道 'root cause'。
我创建了一个问题,因为我不确定这是错误还是 'feature' The issue
此外,我在 watir/capabilities.rb:
中有一个针对我的案例的解决方法改变
@selenium_browser = browser == :remote || options[:url] ? :remote : browser
至
@selenium_browser = browser == :remote ? :remote : browser
这不应该是最终解决方案,因为它可能不是一个好主意。将等待 Watir 人对此的看法。
我正在使用 Java+Docker+Selenium+Chrome 进行自动化测试,也遇到了类似的问题。请在下面找到我的解决方案并尝试它是否适合您的情况。
- 不要在选项中设置默认下载目录,只需保留“/home/seluser/Downloads”即可。
- 当您在docker上启动chrome节点时,请添加可以将下载的文件传输到您想要的目录的卷参数。
例如docker 运行 -d -p 5900:5900 --link myhub:hub -v :/home/seluser/Downloads selenium/node-chrome-debug:3.14.0
在我的例子中,JDK 环境和我的测试脚本在 Linux 机器上,而 selenium webdriver 和浏览器都在 docker 上,所以一旦浏览器下载了文件它不能直接保存在 Linux 机器上,你必须在 docker 上使用默认目录挂载本地目录。然后你就可以找到保存在你想要的目录中的文件。 感谢和问候! 静