PageObject Gem - 未处理警报弹出窗口

时间:2014-09-29 16:56:16

标签: alert pageobjects page-object-gem

我是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

2 个答案:

答案 0 :(得分:1)

错误消息NoMethodError: undefined method 'alert' for nil:NilClass表示您的@curr_page为零,因此没有定义的#alert方法。看看你在哪里定义这个实例变量。这是罪魁祸首。

答案 1 :(得分:0)

在我做出的初步更改后,我得到了模态相关的错误。我在我的页面类中意识到我的login_to_nectar方法正在调用'sign_in'元素,所以实际上这被调用了两次(在alert_msg方法中第二次)。我把它从'login_to_nectar方法中拿出来,一切正常。感谢..