首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium [弃用]:配置文件已弃用。请改用Selenium::WebDriver::Firefox::Options#profile=

Selenium [弃用]:配置文件已弃用。请改用Selenium::WebDriver::Firefox::Options#profile=
EN

Stack Overflow用户
提问于 2020-09-24 18:47:55
回答 2查看 919关注 0票数 0

我在GNU/Linux上有一个测试机器人,它输入一些电子邮件到一些表单并提交它们。它没有与Rails集成。

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

代码语言:javascript
复制
#!/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,我都会收到以下警告:

代码语言:javascript
复制
/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.

因此,我考虑使用:

代码语言:javascript
复制
c = Selenium::WebDriver::Firefox::Options.new
c.profile = 'default'

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2020-09-24 23:30:53

转到此文件夹

代码语言:javascript
复制
C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles

然后找到名为.default的默认文件夹,复制该文件并将该名称附加到上面指定的路径

代码语言:javascript
复制
C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\zxbjl3ls.default

然后编写以下代码

代码语言:javascript
复制
profile = Selenium::WebDriver::Firefox::Profile.new('C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\zxbjl3ls.default')

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

更新:

代码语言:javascript
复制
  profile = Selenium::WebDriver::Firefox::Profile.new(ENV['APPDATA'] + '\Mozilla\Firefox\Profiles\Normal')
票数 0
EN

Stack Overflow用户

发布于 2020-10-16 18:31:49

因为您处理Webdriver初始化的方式在当前的Selenium webdriver中已经过时了。我建议看看Capybara repo中的这段代码作为参考:

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64044863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档