Как отключить параметр plain_text.wrap_long_lines в geckodriver? - PullRequest
0 голосов
/ 15 октября 2018

Используя selenium-webdriver и capybara в rspec, в спецификации возможностей я пытаюсь получить HTTP-ответ на простой текстовый запрос, а именно /robots.txt

Но вместо получения простого текстового ответаЯ получаю текстовый ответ, завернутый в HTML:

<code>   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
"

При извлечении /robots.txt с помощью curl я получаю ожидаемый простой текстовый ответ. Поэтому яПрошел через параметры Firefox, и я обнаружил, что мне нужно отключить параметр plain_text.wrap_long_lines .

И я не могу передать параметр в geckodriver.

Iсначала попытался передать его объекту 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
  • capybara 3.7.2
  • geckodriver 0.22.0

1 Ответ

0 голосов
/ 16 октября 2018

Проблема, с которой вы сталкиваетесь, заключается в том, что когда 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)
...