1

我想指定一个基本 URL,所以我不必总是指定绝对 URL。如何指定 Mechanize 使用的基本 URL?

4

2 回答 2

3

要使用 Webrat 完成先前提供的答案,您可以在 Cucumber env.rb 中执行以下操作:

require 'webrat'

Webrat.configure do |config|
  config.mode = :mechanize
end

World do
  session = Webrat::Session.new
  session.extend(Webrat::Methods)
  session.extend(Webrat::Matchers)
  session.visit 'http://yoursite/yourbasepath/'
  session
end

为了使它更健壮,例如在不同的环境中使用,你可以这样做:

ENV['CUCUMBER_HOST'] ||= 'yoursite'
ENV['CUCUMBER_BASE_PATH'] ||= '/yourbasepath/'

# Webrat
require 'webrat'

Webrat.configure do |config|
  config.mode = :mechanize
end

World do
  session = Webrat::Session.new
  session.extend(Webrat::Methods)
  session.extend(Webrat::Matchers)
  session.visit('http://' + ENV['CUCUMBER_HOST'] + ENV['CUCUMBER_BASE_PATH'])
  session
end

请注意,如果您使用的是 Mechanize,Webrat 也将无法跟踪您的重定向,因为它不会正确解释当前主机。要解决此问题,您可以添加session.header('Host', ENV['CUCUMBER_HOST'])到上述内容。

为了确保在任何地方都使用正确的路径进行访问和匹配ENV['CUCUMBER_BASE_PATH'] +,如果您使用它,请添加到paths.rb 中paths_to 方法的开头。它应该如下所示:

  def path_to(page_name)
    ENV['CUCUMBER_BASE_PATH'] + 

    case page_name

如果有人从中收到一些电子邮件,我深表歉意——我最初试图发表评论,而 Stack Overflow 令人恼火的 UI 让我变得更好。

于 2011-06-23T17:46:04.483 回答
1

对于 Mechanize,您指定的第一个 URL 将被视为基本 URL。例如:

require "rubygems"
require "mechanize"

agent = Mechanize.new
agent.get("http://some-site.org")

# Subsequent requests can now use the relative path:

agent.get("/contact.html")

这样,您只需指定一次基本 URL。

于 2011-06-03T13:11:08.643 回答