访问外部时无法从 Capybara 移除端口 link

Cannot remove port from Capybara while visiting external link

每当我从我的应用程序访问一些 url 然后在访问 twitter 后转到 "twitter:3000" 现在我想删除 :3000 以便在我的测试用例中我可以成功访问外部 link 。我尝试了几种选择,但没有用。我在 Rails

中使用水豚

这是测试用例

test 'z' do
  visit companies_url
  login_twitter
end

def login_twitter
  Capybara.run_server = false
  Capybara.server_port = ''
  Capybara.server_host = 'https://twitter.com'
  visit 'https://twitter.com' #here it goes to **https://twitter.com:3000**
  fill_in 'signin-email', with: 'email@email.com'
  fill_in 'signin-password', 'pass'
  page.find('a', :text => /\ALog in\z/).click
end

application_system_test_case.rb

Capybara.server_port = 3000
Capybara.default_max_wait_time = 10
Selenium::WebDriver::Chrome.driver_path = '/home/chromedriver'
driven_by :selenium

看起来你正在使用 Rails 5.1 系统测试,他们选择启用 Capybara.always_include_port = true 告诉 Capybara 插入应用程序所在的端口 运行每次 url 访问(除非明确指定了非默认端口)。要解决此问题并直接访问外部站点,您可以这样做

def login_twitter
  Capybara.always_include_port = false  
  visit 'https://twitter.com' #here it goes to **https://twitter.com:3000**
  fill_in 'signin-email', with: 'email@email.com'
  fill_in 'signin-password', 'pass'
  page.find('a', :text => /\ALog in\z/).click
  Capybara.always_include_port = true
end

此外,我不确定您为什么要设置 Capybara.server_port = 3000,这通常不是一个好主意,因为它会阻止您在 运行 测试时使用开发实例 运行。通常最好不要指定特定的 server_port(让 Capybara 使用随机端口),除非您确实需要它(firewall/routing 问题)。