Selenium WebDriver for ruby失败,返回“0”;“重定向太多”;

Selenium WebDriver for ruby失败,返回“0”;“重定向太多”;,ruby,selenium,webdriver,testunit,Ruby,Selenium,Webdriver,Testunit,我有一个简单的测试用例来测试登录表单。 出于某种原因,webdriver拒绝运行测试,并返回“太多重定向”消息。该页面只是一个普通的登录屏幕,非常简单,没有任何重定向。从服务器对页面的访问似乎正常 我正在centos服务器上使用selenium-webdriver-2.25.0 下面是错误消息: (...) [WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different J

我有一个简单的测试用例来测试登录表单。 出于某种原因,webdriver拒绝运行测试,并返回“太多重定向”消息。该页面只是一个普通的登录屏幕,非常简单,没有任何重定向。从服务器对页面的访问似乎正常

我正在centos服务器上使用selenium-webdriver-2.25.0

下面是错误消息:

(...)

[WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different JSON library to improve performance.
EE
Finished in 0.206445 seconds.

1) Error: test_login(Login):
Selenium::WebDriver::Error::WebDriverError: too many redirects
/usr/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:62:in `request'
/usr/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:63:in `request'
/usr/lib/ruby/gems/1.8/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call'

(...)
我的代码:

require "rubygems"
require "selenium-webdriver"
require "test/unit"

class Login < Test::Unit::TestCase

  def setup
    @driver =Selenium::WebDriver.for(:remote, :url => "http://selenium.server.com/wd/hub")
    @base_url = "http://www.myservice.com"
    @driver.manage.timeouts.implicit_wait = 30
    @verification_errors = []
  end

  def teardown
    @driver.quit
    assert_equal [], @verification_errors
  end

  def test_login
    @driver.get(@base_url + "/login/")
    @driver.find_element(:id, "username").clear
    @driver.find_element(:id, "username").send_keys "user@server"
    @driver.find_element(:id, "password").clear
    @driver.find_element(:id, "password").send_keys "mykeys!"
    @driver.find_element(:xpath, "//input[@value='Login']").click
    verify { assert element_present?(:link, "Logout") }
    verify { assert element_present?(:link, "Settings") }
    verify { assert element_present?(:link, "Products") }
  end

  def element_present?(how, what)
    @driver.find_element(how, what)
    true
  rescue Selenium::WebDriver::Error::NoSuchElementError
    false
  end

  def verify(&blk)
    yield
  rescue Test::Unit::AssertionFailedError => ex
    @verificatiohttp://jenkins.dev.emesa-auctions.com/cms/n_errors << ex
  end
end
需要“rubygems”
需要“selenium webdriver”
需要“测试/单元”
类登录)http://selenium.server.com/wd/hub")
@基本url=”http://www.myservice.com"
@driver.manage.timeouts.implicit_wait=30
@验证_错误=[]
结束
def拆卸
@司机,退出
断言_等于[],@verification_错误
结束
def测试单元登录
@driver.get(@base_url+“/login/”)
@driver.find_元素(:id,“username”)。清除
@驱动程序。查找元素(:id,“username”)。发送密钥“user@server"
@driver.find_元素(:id,“password”)。清除
@驱动程序。查找元素(:id,“password”)。发送密钥“mykeys!”
@查找元素(:xpath,“//input[@value='Login'])。单击
验证{assert element_present?(:link,“Logout”)}
验证{assert element_present?(:link,“Settings”)}
验证{assert element_present?(:link,“Products”)}
结束
def元素_是否存在?(如何、什么)
@驱动程序。查找元素(如何、什么)
真的
rescue Selenium::WebDriver::错误::NoSuchElementError
假的
结束
def验证(&blk)
产量
救援测试::单元::断言失败错误=>ex

@验证catiohttp://jenkins.dev.emesa-auctions.com/cms/n_errors 我自己设法解决了这个问题。问题是,我是通过面向公众的url(selenium.server.com)而不是通过内部lan url(绕过防火墙)访问服务器的


更改该选项修复了问题。

也验证了{assert element_present?(:link,“Logout”)}
对u是否有效?它似乎正在发挥作用。我们正在使用selenium IDE,这是它的一个输出。如果您尝试实际运行该行(以及下面的两行),应该会出现错误。不过我希望它能工作,因为ruby test/unit only assert中没有验证。另外,我认为应该是
assert@driver.element\u present?(:link,“logout”)