【问题标题】:Selenium [DEPRECATION] :profile is deprecated. Use Selenium::WebDriver::Firefox::Options#profile= insteadSelenium [DEPRECATION] :profile 已弃用。改用 Selenium::WebDriver::Firefox::Options#profile=
【发布时间】:2021-01-10 15:40:09
【问题描述】:

我在 GNU/Linux 上有一个测试机器人,它可以将一些电子邮件输入到某种形式并提交它们。它没有与 Rails 集成。

我的机器人看起来像这样:

#!/usr/bin/ruby -w
%w(capybara/dsl selenium-webdriver).each(&method(:require))

Capybara.default_driver = :selenium
Selenium::WebDriver::Firefox::Binary.path = '/opt/firefox-developer-edition/firefox'

Capybara.register_driver(:default_profile) do |a|
    Capybara::Selenium::Driver.new(a, browser: :firefox, profile: 'default')
end

Capybara.default_driver = :default_profile
Capybara.current_session.driver.browser.manage.window.resize_to(640, 720)

emails = %w(
    something1@someone.me
    something2@someone.me
    something3@someone.me
    something4@someone.me
    something5@someone.me
    something6@someone.me
    something7@someone.me
)

names = %W(Sourav SouravGoswami #{"Sourav Goswami"})

n = emails.length
time, len, dsl = Time.now, n.to_s.length, Class.new.extend(Capybara::DSL)

emails.each.with_index do |email, i|
        name = names.rotate![0]

        elap = Time.now - time
        rem = n.*(elap).fdiv(i + 1).-(elap)
        print "\e[2K#{sprintf("%0#{len}d", i)} / #{n} | Elapsed: #{elap.round(1)} s | Remaining: #{rem.round(1)} s\r"

        dsl.visit('https://somewebsite.net')
        dsl.find('#name').set(name)
        dsl.find('#email').set(email)
        dsl.find('#submit').click
end

但每次我使用完全更新的 selenium webdriver 运行它时,都会收到以下警告:

/usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/driver.rb:54: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/firefox/driver.rb:31: warning: The called method `new' is defined here
2020-09-24 16:13:14 WARN Selenium [DEPRECATION] :profile is deprecated. Use Selenium::WebDriver::Firefox::Options#profile= instead.

所以我考虑过使用:

c = Selenium::WebDriver::Firefox::Options.new
c.profile = 'default'

但这不会在默认配置文件中打开 Firefox,也不会调整窗口大小。

我找不到记录 Selenium::WebDriver::Firefox::Options#profile 的好文档。

那么我该如何摆脱这个错误(使用 -W0 ruby​​ 标志除外)?

【问题讨论】:

  • 如果您使用 capybara,则添加 capybara 标签。其他标签不重要。

标签: ruby selenium selenium-webdriver capybara


【解决方案1】:

转到此文件夹

C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles

然后您找到具有某个名称的默认文件夹 .default,复制该文件并将该名称附加到上面的给定路径

C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\zxbjl3ls.default

然后编写如下代码

profile = Selenium::WebDriver::Firefox::Profile.new('C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\zxbjl3ls.default')

driver=Selenium::WebDriver.for :firefox,:profile => profile

更新:

  profile = Selenium::WebDriver::Firefox::Profile.new(ENV['APPDATA'] + '\Mozilla\Firefox\Profiles\Normal')

【讨论】:

  • 虽然您可以在 about:support 页面中获取配置文件,但它很可能位于 ~/.mozilla 目录中。但问题是,我无法对其进行硬编码。没有必要对删除弃用警告的路径进行硬编码。如果我真的需要硬编码,我很喜欢弃用警告!
  • 实际上我没有使用 Windows,而且我的环境没有任何与 'APPDATA' 相关的内容,它只是返回 nil ... :( 不幸的是 ... 换句话说,这可能适用Windows,但在我的 GNU/Linux 系统上,它实际上什么也没做……
【解决方案2】:

因为当前 Selenium Webdriver 已弃用您处理 webdriver 初始化的方式。我建议看看 Capybara repo 中的这个 sn-p 作为参考:

https://github.com/teamcapybara/capybara/blob/master/lib/capybara/registrations/drivers.rb#L11

基本上,:profile 已被弃用,而是将其解析为您的驱动程序初始化 Capybara::Selenium::Driver.new(a, browser: :firefox, profile: 'default'),您需要根据日志建议构建浏览器选项:

Option 1: Using customize profile


CAPYBARA_WINDOW_SIZE = [640, 720].freeze
ff_profile = Selenium::WebDriver::Firefox::Profile.new.tap do |profile| 
# Use this if you want to customize your Firefox profile
# For example:
   profile['browser.download.folderList'] = 2
....
....
end

ff_options = Selenium::WebDriver::Firefox::Options.new(profile: ff_profile)

ff_options.add_argument('-headless') 
ff_options.add_argument("window-size=#{CAPYBARA_WINDOW_SIZE.join(',')}"

Capybara::Selenium::Driver.new(app, browser: :firefox, options: ff_options)

Option 2: Using default profile

CAPYBARA_WINDOW_SIZE = [640, 720].freeze

ff_options = Selenium::WebDriver::Firefox::Options.new

ff_options.add_argument('-headless') 
ff_options.add_argument("window-size=#{CAPYBARA_WINDOW_SIZE.join(',')}"

options[:options] = ff_options

Capybara::Selenium::Driver.new(app, browser: :firefox, options: ff_options)

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2019-04-26
    • 2020-02-06
    • 2018-03-22
    • 1970-01-01
    • 2021-06-08
    • 2013-06-28
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多