Невозможно изменить каталог загрузки по умолчанию для chrome с помощью селена-концентратора и ruby ​​watir - PullRequest
0 голосов
/ 31 октября 2018

После нескольких дней поиска и экспериментов с любыми решениями, которые я смог найти в Интернете, я сдаюсь и хочу получить помощь от сообщества.

Рубиновые камни (ruby 2.5.1):

watir 6.11.0
selenium-webdriver 3.4.1

Docker:

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. Заставьте автоматизацию браузера взаимодействовать с селеном / концентратором, используя приведенный выше код

Проблема в том, что мне никогда не удавалось установить каталог загрузки по умолчанию. Тем не менее, все остальные части работают правильно. Окно VNC показывает, что браузер работает правильно, несмотря на настройки каталога загрузки по умолчанию. Это всегда / home / seluser / Downloads

Вещи, которые я пробовал:

  1. Идеи других людей, такие как различные способы задания опций и предпочтений. (например, используя возможности)
  2. Настройки безопасности Docker, такие как: --privileged --security-opt apparmor: не определено --cap-add SYS_ADMIN
  3. В базовой ОС chmod 777 для каталога download_. Директория download_directory, например, /tmp/tmp.123 в базовой ОС, которая монтируется как /hosttmp/tmp/tmp.123 в контейнере узла chrome, я мог ее увидеть и выполнить несколько операций чтения / записи в этой папке. внутри контейнера или на базе ОС
  4. Подсказки к интересному рубиновому символу / строке при создании объекта Hash.

У кого-нибудь есть идеи о том, что может привести к этой ситуации? Что еще я мог попробовать? И есть ли журнал, к которому я мог бы обратиться. Нет ошибок или предупреждений при запуске кода. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Хорошо, покопавшись в исходном коде Watir и Selenium-Webdriver, я думаю, что знаю «основную причину».

Я создал проблему, так как не уверен, что это ошибка или «фича» Проблема

Кроме того, у меня есть обходной путь для моего случая, в watir /abilities.rb:

Изменить

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

до

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

Это не должно быть окончательным решением, так как это может быть не очень хорошая идея. Будем ждать, что скажут по этому поводу люди Ватира.

0 голосов
/ 23 ноября 2018

Я использую Java + Docker + Selenium + Chrome для тестирования автоматизации, а также столкнулся с аналогичной проблемой с вами. Пожалуйста, найдите мои решения ниже и попробуйте, если это работает для вашего случая.

  1. Не устанавливайте каталог загрузки по умолчанию в настройках, просто оставьте "/ home / seluser / Downloads" как есть.
  2. Когда вы запускаете узел chrome в докере, добавьте параметр тома, который может передавать загруженные файлы в нужный каталог.

например. docker run -d -p 5900: 5900 --link myhub: hub -v: / home / seluser / Загрузки selenium / node-chrome-debug: 3.14.0

В моем случае среда JDK и мой тестовый скрипт находятся на компьютере с Linux, в то время как веб-драйвер и браузер selenium все находятся в докере, поэтому, если файл, загруженный браузером, не может быть сохранен непосредственно на компьютере с Linux, вам необходимо смонтировать локальный каталог с каталогом по умолчанию на докере. Затем вы можете найти файл, сохраненный в нужном вам каталоге. С уважением! Jing

0 голосов
/ 01 ноября 2018

Вы определили 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}

...