【问题标题】:Capybara/Poltergeist HTTP AuthenticationCapybara/Poltergeist HTTP 身份验证
【发布时间】:2016-07-28 04:05:31
【问题描述】:

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

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

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

我现在在 Firefox 上运行它,我尝试做 http://username:password@localhost:3000 但它通常会警告“网络钓鱼站点”,但我还是继续,但它不起作用,并且 http 弹出窗口仍然出现。 (我听说很多浏览器禁用了这个功能)。

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

我看到之前提到的一个问题:HTTP basic auth for Capybara

但是看到上面的网址不起作用,这似乎也不起作用。

编辑:当前 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

【问题讨论】:

    标签: automation capybara poltergeist


    【解决方案1】:

    你可以试试

    page.driver.basic_authorize(username, password)
    

    在访问 Poltergeist 中的页面之前。这将在 phantomjs 中设置用户名和密码以及“授权”标题

    【讨论】:

    • 我希望它会像那时一样简单,不幸的是我得到了“无法访问服务器”。由于数据库,这个应用程序在本地运行非常慢......但只要它在它之前设置的用户名/密码不重要吗?我确保我的超时设置也很高。 (它适用于 selenium,当我在运行时手动输入用户名/密码时)
    • 其实我认为问题在于它是作为代理站点运行的,所以正常的http headers不起作用。
    • @msmith1114 使用 poltergeist 有 page.driver.headers=/add_headers/add_header 因此您可以设置所需的任何标题 - 尽管“无法访问服务器”听起来并不像拒绝身份验证 -你设置什么超时? (在驱动注册中设置了Poltergeists超时选项)
    • 超时设置为 30 秒(Capybara.default_max_wait_time = 30),但我认为发生的事情是它在没有密码/用户名的情况下坐在 HTTP 身份验证上......所以它最终只是时间出去。我没有在 poltergeist 驱动程序中专门设置超时(但我认为默认 30“应该”就足够了)。将它作为 selenium 运行(并让它超时)会产生不同性质的超时错误)
    • 添加了一个编辑以显示我当前的 poltergeist 驱动程序设置问题。
    【解决方案2】:

    在这里为那些使用 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 基本身份验证。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多