我正在使用页面对象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登录页面。
答案 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部分,但是'当前'?没有调用“当前”方法,并且在此示例中没有时间类。这是隔离和查看是否可以清理的一个问题。