Как создать хромовый профиль с помощью Ruby Selenium Binding (или WATIR) - PullRequest
0 голосов
/ 05 июля 2018

Я знаю, как создать профиль для Firefox

require 'watir'
options = Selenium::WebDriver::Firefox::Options.new
options.profile = "default"
@driver = Selenium::WebDriver.for :firefox, options: options
@b = Watir::Browser.new @driver

Но когда я делаю то же самое для Chrome, который он не создает, Infact, я понял, что у объекта options (пожалуйста, посмотрите выше) даже нет метода profile=, поэтому я пытаюсь добавить профиль, как показано ниже (я видел, как люди создаем в Java Selenium Binding, поэтому я сделал то же самое, но здесь это не работает)

options = Selenium::WebDriver::Firefox::Options.new
options.add_argument('user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data\Default')
@driver = Selenium::WebDriver.for :chrome, options: options

Может кто-нибудь помочь мне создать профиль Chrome с помощью привязки Ruby Selenium (или WATIR)?

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Использование существующего или создание нового профиля может быть выполнено с помощью аргумента Chromedrivers user-data-dir. В Watir вы можете передать аргумент через параметр :args:

browser = Watir::Browser.new :chrome, 
  args: ['user-data-dir=C:\Users\user_name\AppData\Local\Google\Chrome\User Data']

Обратите внимание, что если вы пытаетесь использовать существующий профиль по умолчанию, вы не хотите включать в путь каталог "Default".

0 голосов
/ 06 июля 2018

Поскольку вы попросили в комментариях более подробное объяснение для Капибары, я публикую его как ответ (хотя у вас, похоже, уже есть рабочее решение - извините за задержку ответа).

В моих проектах rails я обычно настраиваю драйвер Selenium Chrome следующим образом:

gem 'chromedriver-helper'

в Gemfile (или установите его локально). Затем в инициализаторе системного теста определите

Capybara.register_driver :selenium_chrome_headless_no_sandbox do |app|
  browser_options = ::Selenium::WebDriver::Chrome::Options.new
  browser_options.args << '--headless'
  browser_options.args << '--disable-gpu'
  browser_options.args << '--no-sandbox'
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
end

и позже (настройка RSpec) Я установил его как используемый драйвер, например:

RSpec.configure do |config|
  config.before(:each, type: :system, js: true) do
    driven_by :selenium_chrome_headless_no_sandbox
  end
end

Может быть, это кому-то поможет. Приветствия

редактировать: добавлен хром-драйвер-помощник

0 голосов
/ 05 июля 2018

Я сделал функцию для создания нового браузера. Вы можете использовать его.

 def new_browser
  if Rails.env.production?
    chrome_bin = ENV.fetch('GOOGLE_CHROME_SHIM', nil)
    Selenium::WebDriver::Chrome.path = "/app/.apt/usr/bin/google-chrome"
    Selenium::WebDriver::Chrome.driver_path = "/app/vendor/bundle/bin/chromedriver"
  end


  profile = Selenium::WebDriver::Chrome::Profile.new
  profile['general.useragent.override'] = 'Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10'

  driver = Selenium::WebDriver.for :chrome, :profile => profile
  pid = driver.instance_variable_get(:@service).instance_variable_get(:@process).instance_variable_get(:@pid)

  begin
    browser = Watir::Browser.new driver
  rescue => e
    system("kill -9 #{@pid}")
  end
  return {:browser => browser , :pid => pid}
end
...