Capybara/Poltergeist HTTP 身份验证

Capybara/Poltergeist HTTP Authentication

所以我正在尝试 运行 在 Rails 站点上进行一些自动化测试,这似乎需要基本的 HTTP 身份验证:

我使用 localhost:3000 作为我的主机。

Capybara.app_host = "http://localhost:3000"
Capybara.server_host = "localhost"
Capybara.server_port = "3000"

我现在 运行 在 firefox 上运行它,我尝试做 http://username:password@localhost:3000 但它通常会警告 "phishing sites" 但我仍然继续,但它不起作用并且http 弹出窗口仍然出现。 (我听说很多浏览器禁用了这个功能)。

我知道 Selenium 有办法绕过它,但是 Poltergeist 呢?或 Capybara 内置的任何东西。

我看到这里提到了一个以前的问题:

但是上面的 url 不起作用,这似乎也不起作用。

编辑:当前的 Poltergeist 驱动程序设置:

options = {
       :timeout => 45,
       :phantomjs_options => ["--proxy-auth="]
    }
    Capybara.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new(app, options)
    end
    Capybara.default_driver = :selenium
    Capybara.javascript_driver = :poltergeist

你可以试试

page.driver.basic_authorize(username, password)

在访问 Poltergeist 中的页面之前。这将在 phantomjs 中设置用户名和密码以及 'Authorization' header

为那些使用 Selenium + Firefox 的人提供另一个解决方案:

当您访问需要 HTTP 基本身份验证的页面时,Firefox 会显示一个对话框,要求您输入用户名和密码。

Selenium 没有为您提供很多与对话框交互的选项,但它有一个 accept_alert 方法可以接受可选的击键。

要同时在两个字段中输入文本,您可以使用 Selenium 的 tab 键码:

tab = Selenium::WebDriver::Keys::KEYS[:tab]
SESSION.accept_alert(with: username + tab + password)

这是我唯一可以使用的解决方案 - 我使用的是 Selenium 的 remote 驱动程序,它不支持内置的 HTTP 基本身份验证。

如果一切都失败了,试试这个。