我的测试尝试访问网页并验证网页上是否存在某些元素。例如,它访问http://foo.com/homepage.html
并检查徽标图片,然后访问http://bar.com/store/blah.html
并检查页面上是否显示某些文字。我的目标是访问Kerberos经过身份验证的网页。
我发现Kerberos代码如下:
主要文件
uri = URI.parse(Capybara.app_host)
kerberos = Kerberos.new(uri.host)
@kerberos_token = kerberos.encoded_token
kerberos.rb文件
class Kerberos
def initialize(host)
@host = host
@credentials = AuthGss::Negotiate.new("HTTP@#{@host}")
@credentials.cache = ENV['KRB5CCNAME'] if ENV['KRB5CCNAME']
@token = @credentials.step("")
end
def encoded_token
Base64.encode64(@token).gsub(/\n/,"")
end
end
它使用Capybara.app_host
值。我无法弄清楚要设置Capybara.app_host
值的内容。我无法弄清楚它的作用。我有Capybara.run_server = false
。有人可以帮助我了解如何使用Capybara.app_host
以及这与Kerberos身份验证的关系吗?
答案 0 :(得分:7)
Capybara docs显示使用远程主机的示例。 app_host
是您的Web应用程序的基本主机:
Capybara.current_driver = :selenium
Capybara.run_server = false
Capybara.app_host = 'http://www.google.com'
visit('/users') # goes to http://www.google.com/users
答案 1 :(得分:7)
我对app_host
感到困惑,但是在对Capybara源代码进行挖掘之后,它似乎并没有真正做到这么多。实际上,它似乎只在Capybara源代码one place中使用:
if url_relative && Capybara.app_host
url = Capybara.app_host + url
url_relative = false
end
基本上,如果您将/posts/1/edit
之类的相对网址传递给visit
这样的方法,Capybara会访问网址“#{Capybara.app_host} / posts / 1 / edit`。所以以下内容两段代码是等价的:
# 1:
Capybara.app_host = "https://stackoverflow.com"
visit "/questions/19991349"
# 2:
visit "https://stackoverflow.com/questions/19991349"
默认情况下,RSpec将app_host
设置为http://localhost
,这就是为什么你可以在开箱即用的时候使用Capybara和Rails编写像before { visit edit_post_path(1) }
这样的代码,而你不需要每次都写localhost
。