: driver_opts устарела. Используйте вместо этого: service с экземпляром Selenium :: WebDriver :: Service - PullRequest
0 голосов
/ 22 июня 2019
2019-06-19 15:44:43 WARN Selenium [DEPRECATION] :driver_opts is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.
Screenshot error, but continue to execute.
wrong number of arguments (given 0, expected 1)
2019-06-19 15:44:43 WARN Selenium [DEPRECATION] :driver_opts is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.
2019-06-19 15:44:43 WARN Selenium [DEPRECATION] :driver_opts is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.
          visit in hook, after scenario +1s, @1s
2019-06-19 15:44:43 WARN Selenium [DEPRECATION] :driver_opts is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.

Я использовал приведенный ниже фрагмент кода, чтобы начать сеанс со старой 'selenium-webdriver' v3.6.0, и получил вышеуказанную ошибку:

Обновлено 23 июня.

if Capybara.default_driver == :selenium
    Capybara.register_driver :selenium do |app|
        # In the block, we build up an `options` hash to pass to
        #   Capybara::Selenium::Driver.new(app, options)
        # which in turn calls
        #   Selenium::WebDriver.for(options[:browser], options)

        browser = Configuration.fetch('browser.type', :firefox) 
        options = {
            browser: browser, # chrome
        }

        if Configuration.fetch('options.webdriver.use_hub', false)
            {...}
        elsif browser == :firefox
            {...}
        elsif browser == :chrome
            chrome_logpath = "../chromedriver.log"
            options[:service] = ::Selenium::WebDriver::Service.chrome(
                args: {
                    verbose: true,
                    log_path: chrome_logpath,
                }
            )
            chrome_options = Selenium::WebDriver::Chrome::Options.new
            chrome_options.add_argument("user-agent='QA Test'")
            chrome_options.add_option('w3c',false)
            options[:options] = chrome_options
        end
    Capybara::Selenium::Driver.new(app, options)
    end
end

После того, как поднял этот камень до версии 3.142.0, я получил эту ошибку. Возвращаясь к журналу изменений Selenium Webdriver в https://github.com/SeleniumHQ/selenium/blob/master/rb/CHANGES, я нашел следующее описание, которое может нарушить текущий код 3.141.592 (2019-04-18)

Chrome: 
Added support for instantiating service class directly and moved all driver executable configuration there (command-line arguments, port, etc.)
Passing driver_opts, driver_path and port to driver initializer is now deprecated 
so use Selenium::WebDriver::Service.chrome instead, 
which allows to customize executable behavior in similar way.
 Once initialized, this object can be passed as :service keyword 
during driver initialization. 
* Deprecated Chrome.driver_path= in favor of Service::Chrome.driver_path=

Погуглив некоторое время, я нашел некоторые результаты и обходной путь, например, использование драгоценного камня 'webdriver', но он мне не очень нравится.

Так вот, интересно, могу ли я что-то изменить в моем фрагменте выше, чтобы адаптировать его к этому selenium-webdriver версии 3.142.0 и далее? Я использую Capybara v3.18.0 на данный момент.

Спасибо всем,

1 Ответ

0 голосов
/ 22 июня 2019

Это не ошибка, это предупреждение об устаревании.Он говорит вам, что вам нужно будет изменить свой код перед выпуском selenium-webdriver v4.0.Если вы чувствуете, что должны обновить свой код сегодня, это будет что-то вроде

elsif browser == :chrome

  options[:service] = ::Selenium::WebDriver::Service.chrome(
    args: {
      verbose: true,
      log_path: "../chromedriver.log",
    }
  )

  chrome_options = Selenium::WebDriver::Chrome::Options.new

  # add user agent to that class options
  chrome_options.add_argument("user-agent='QA Test'")
  options[:options] = chrome_options
end

Другие вещи, которые вы показываете

Screenshot error, but continue to execute.
wrong number of arguments (given 0, expected 1)

, это что-то другое и не исходит из какого-либо кодаты показываешь.

...