我是PageObject(和ruby)的新手......
如果未提供用户ID,我在处理警报弹出窗口时遇到问题。
以下是代码和方案:
当我点击没有用户ID的“登录”按钮时,我期待一条带有消息的警报,我正在我的脚本中进行验证。
目前收到错误消息:
NoMethodError: undefined method
提醒'为nil:NilClass`
cucumber然后声明: 然后我应该看到一个弹出消息“输入卡号”
步骤定义: `
Then(/^I should see an popup message "([^"]*)"$/) do |popup_msg|
on(LoginPage).alert_msg
end
***Page object code:***
class LoginPage
require_relative 'common'
include PageObject
include Common
text_field(:collector, :id => 'j_col')
text_field(:password, :id => 'j_password1')
button(:sign_in, :value => 'Sign in')
def login_to_nectar (collector = FigNewton.collector.colid, password = FigNewton.collector.password)
self.collector = collector
self.password = password
sign_in
end
span(:pwd_error_msg, :css => 'p.error-message')
def alert_msg
message = @curr_page.alert do
sign_in.click
end
message.should == 'enter card numbe'
@alert_msg
end
end
`
....最新信息......进展
@Johnson谢谢......现在我收到了错误:
Selenium::WebDriver::Error::UnhandledAlertError: Modal dialog present: "enter card number. "
我可以看到PageObject正在处理弹出窗口。我的新代码如下:
def alert_msg
alert do
self.sign_in.click
end
@alert_msg
end
我在验证消息之前的步骤中将其称为步骤定义....
When(***without a card number$/) do
on(HomePage).click_login
on(LoginPage).login_to_nectar('', FigNewton.collector.password)
@current_page.**alert_msg**
end
Then***
on(LoginPage).**alert_msg**.should == popup_msg
end
答案 0 :(得分:1)
错误消息NoMethodError: undefined method 'alert' for nil:NilClass
表示您的@curr_page
为零,因此没有定义的#alert方法。看看你在哪里定义这个实例变量。这是罪魁祸首。
答案 1 :(得分:0)
在我做出的初步更改后,我得到了模态相关的错误。我在我的页面类中意识到我的login_to_nectar方法正在调用'sign_in'元素,所以实际上这被调用了两次(在alert_msg方法中第二次)。我把它从'login_to_nectar方法中拿出来,一切正常。感谢..