如何在geckodriver中禁用plain_text.wrap_long_lines选项?

时间:2018-10-15 09:31:54

标签: selenium-webdriver ruby-on-rails-5 capybara geckodriver

在rspec中使用selenium-webdriver和capybara,在功能规范中,我试图获取纯文本请求的HTTP响应,即/robots.txt

但是我没有得到纯文本响应,而是得到了用HTML包装的文本响应:

   expected: "User-agent: *\nDisallow:\n\nSitemap: https://prj.org/sitemap.xml\n"
        got: "<html><head><link rel=\"alternate stylesheet\" type=\"text/css\" href=\"resource://content-accessible/plaintext.css\" title=\"Wrap Long Lines\"></head><body><pre>User-agent: *\nDisallow:\n\nSitemap: https://prj.org/sitemap.xml\n</pre></body></html>"

使用curl提取/robots.txt时,我得到了预期的纯文本响应。因此,我浏览了Firefox选项,发现需要禁用 plain_text.wrap_long_lines 选项。

而且我无法成功将选项传递给geckodriver。

我首先尝试将其传递给Options对象,如下所示:

Capybara.register_driver :firefox_headless do |app|
  options = ::Selenium::WebDriver::Firefox::Options.new
  options.headless!
  options.add_preference 'plain_text.wrap_long_lines', false

  Capybara::Selenium::Driver.new app, browser: :firefox, options: options
end

然后我尝试将其传递给Profile对象。

Capybara.register_driver :firefox_headless do |app|
  options = ::Selenium::WebDriver::Firefox::Options.new
  options.headless!

  profile = Selenium::WebDriver::Firefox::Profile.new
  profile['plain_text.wrap_long_lines'] = false

  Capybara::Selenium::Driver.new app, browser: :firefox, options: options, profile: profile
end

在两种情况下,结果都是相同的。任何想法,为什么?谢谢!

使用:

  • selenium-webdriver 3.14.1
  • 水豚3.7.2
  • geckodriver 0.22.0

1 个答案:

答案 0 :(得分:0)

您在这里看到的问题是,当Firefox打开文本文件时,它会自动将其包装在一些样板html中,以便浏览器能够显示它。您不会显示正在使用的测试代码-但是您所做的任何事情都应该归结为类似

# If using minitest
visit('/robots.txt')
find('body > pre').assert_text("User-agent: *\nDisallow:\n\nSitemap: https://prj.org/sitemap.xml\n", exact: true)

# If using RSpec
visit('/robots.txt')
expect(find('body > pr')).to have_text("User-agent: *\nDisallow:\n\nSitemap: https://prj.org/sitemap.xml\n", exact: true)