page-object gem似乎不起作用

时间:2013-10-20 03:09:52

标签: watir watir-webdriver page-object-gem

我试图在我的watir-webdriver脚本中使用page-object gem,我想我可能会遗漏一些东西。

这是我的log_in.rb代码: 要求“./all_deals”

class LogIn
  include PageObject

  text_field(:email, :id => 'UserName')
  text_field(:password, :id => 'Password')
  checkbox(:remember_me, :id => 'RememberMe')
  button(:log_me_in, :value => 'Login')

  def initialize(browser)
    @browser = browser
  end

  def log_in (email, password)
    self.email = email
    self.password = password
    remember_me
    log_me_in
    AllDeals.new(@browser)
  end
end

我的home_page.rb

require "./log_in"

  class HomePage

    def initialize(browser)
      @browser = browser
    end

    def visit
      @browser.goto "http://treatme.co.nz/"
    end

    def go_to_log_in
      @browser.goto "https://treatme.co.nz/Account/LogOn"
      LogIn.new(@browser)
    end
  end

这是我的log_in_test.rb

require "rubygems"
require "test/unit"
require "watir-webdriver"
require "page-object"
require "./home_page"


class LogInTest < Test::Unit::TestCase
  def setup
    @browser ||= Watir::Browser.new :firefox
  end

  def teardown
   @browser.close
  end

  def test_fail
    @home_page = HomePage.new(@browser)
    @home_page.visit
    @log_in_page = @home_page.go_to_log_in
    @all_deals = @log_in_page.log_in("test@gmail.com","test")
    assert (@all_deals.get_title == "GrabOne Daily Deals - Buy Together, Save Together")
  end
end

测试运行的结果是:

Finished tests in 22.469286s, 0.0445 tests/s, 0.0000 assertions/s.

  1) Error:
test_fail(LogInTest):
NoMethodError: undefined method `text_field_value_set' for nil:NilClass
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/page-object-0.9.2/lib/page-object/accessors.rb:142:in `block in text_field'

我正在使用带有页面对象gem 0.9.2的Ruby 1.9。

你能帮帮我吗?

同样在每个rb文件中,我需要它引用的类文件,有没有一种方法我不必每次都声明它?

非常感谢。

1 个答案:

答案 0 :(得分:3)

解决例外问题

正在发生异常,重新定义初始化方法的LogIn页面。

class LogIn
  include PageObject

  def initialize(browser)
    @browser = browser
  end
end

当您包含PageObject时,它已经添加了一个特定的初始化方法。你的类正在重写初始化,并可能导致某些东西无法正确设置。

删除initialize方法会让您超越该异常。

然而,您将点击remember_me不是变量/方法异常。假设您要选中该复选框,则应为check_remember_me

需要类文件

我的测试文件通常需要一个需要所有page_objects的文件。它与您需要任何其他宝石或库的方式类似。

例如,我将创建一个treatme.rb文件:

require 'log_in'
require 'home_page'

假设您需要所需顺序的文件(即首先需要其他人需要的文件),您的页面对象文件(即log_in.rb和home_page.rb)都不需要执行任何操作。

您的测试文件只需要您的treatme.rb文件。例如:

require './treatme'