populate_page_with方法给出错误"未定义的方法send_keys"与硒网络驱动程序一起使用时

时间:2014-09-11 16:28:40

标签: selenium jruby pageobjects page-object-gem

我正在使用页面对象gem和selenium web-driver。我正在尝试自动化gmail登录页面。所以要输入mail_id和密码,我使用populate_page_with方法。

我将登录凭据存储在变量“data”

data = {:mail_id => 'abc@abc.com',: mail_password => '12345'}

并使用下面的方法调用populate_page_

populate_page_with data

当我尝试运行脚本时,它会出现错误未定义方法 send_keys

但是当我尝试自动化雅虎邮件登录页面时,实现工作正常。

我的网页对象类

class GmailSignInPage
  include PageObject

  button :gsubmit,                              :id => 'signIn'
  text_field :mail_id,                          :id => 'Email'
  text_field :mail_password,                    :id => 'Passwd'

  def log_in_to_gmail(data = {})
    self.mail_password_element.when_visible
    populate_page_with data
    self.gsubmit
  end
end

我的步骤定义是

Given /^I navigate to gmail page$/ do
  data = { :mail_id => 'abc@abc.com', :mail_password=> '12345' }
  on(GmailSignInPage).log_in_to_gmail data
end

在supports / env.rb中,我还添加了PageFactory类

World(PageObject::PageFactory)

如果我修改我的log_in_to_gmail方法,那么我也会得到同样的异常

undefined method 'send_keys' for #<NoMethodError: undefined method 'current' for Time:Class> (NoMethodError)

  def log_in_to_gmail(data = {})
    self.mail_password = data['mail_id']
    self.mail_password = data['mail_password']
    self.gsubmit
  end

但是如果我使用send_keys方法,它的工作正常,除了警告信息

  def log_in_to_gmail(data = {})
    mail_id_element.send_keys data['mail_id']
    mail_password_element.send_keys data['mail_password']
    self.gsubmit
  end

警告信息是

*** DEPRECATION WARNING

*** You are calling a method named bridge at C:/jruby-1.7.6/lib/ruby/gems/shared/gems/page-object-0.9.2/lib/page-object/elements/element.rb:27:in 'wait_for_document_ready'.

*** This method does not exist in page-object so it is being passed to the driver.

*** This feature will be removed in the near future.

*** Please change your code to call the correct page-object method.

*** If you are using functionality that does not exist in page-object please request it be added.

所以我认为,这不是populate_page_with方法的问题,因为即使赋值运算符=也会出现相同的异常。这可能是由于page_object gem无法处理gmail登录页面。

1 个答案:

答案 0 :(得分:0)

好的,让我们再试一次。

我创建了一个测试并复制粘贴了上面的所有示例代码(使用populate_page_with()方法)。与您的代码相比,我确实对代码进行了一次关键更改:

此致

on(GmailSignInPage).log_in_to_gmail data

GmailSignInPage.new(@browser).log_in_to_gmail data

我不知道代码中的on()方法来自哪个gem。我猜,但我想让这个答案更基于我以前的答案。 :)

完成此操作后,我就能成功登录Google。因此,Google登录页面没有任何异常,或者我在页面对象宝石中遇到的任何限制或您的方法有任何问题。

所以我们之间唯一不同的是我上面提到的一行代码,我们的开发环境,我们每个人都使用的其他依赖宝石。

尝试替换上面的行,看看是否有效。

如果没有,我会建议你看看你是否有某种宝石冲突。原因我怀疑这是由于你得到的奇怪异常方法:

  

未定义的方法'send_keys'代表#(NoMethodError)

我得到的send_keys部分,但是'当前'?没有调用“当前”方法,并且在此示例中没有时间类。这是隔离和查看是否可以清理的一个问题。