【问题标题】:page-object gem seems not working页面对象 gem 似乎不起作用
【发布时间】:2015-05-04 06:43:22
【问题描述】:

我正在尝试在我的 watir-webdriver 脚本中使用页面对象 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

我的主页.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'

我正在使用 Ruby 1.9 和页面对象 gem 0.9.2。

你能帮帮我吗?

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

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    解决异常

    LogIn 页面重新定义了初始化方法。

    class LogIn
      include PageObject
    
      def initialize(browser)
        @browser = browser
      end
    end
    

    当您包含 PageObject 时,它已经添加了特定的初始化方法。您的类正在覆盖该初始化,并且可能导致某些内容无法正确设置。

    删除initialize 方法将使您摆脱该异常。

    但是,您随后会遇到remember_me is not a variable/method exception。假设你要勾选复选框,它应该是check_remember_me

    需要类文件

    我通常让我的测试文件需要一个需要我所有 page_objects 的文件。这与您需要任何其他 gem 或库的概念类似。

    例如,我将创建一个 treatme.rb 文件,其中包含:

    require 'log_in'
    require 'home_page'
    

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

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

    require './treatme'
    

    【讨论】:

    • 您好贾斯汀,感谢您的回复。我从 log_in.rb 中删除了初始化语句,它起作用了。但我很抱歉我真的不明白为什么。因为在我的 LogIn 类中,方法 log_in 确实使用了 @browser 局部变量。但是我删除了初始化来声明这个变量,为什么它没有抱怨?
    • 当您执行include PageObject 时,它会自动将initialize 方法添加到您的类(请参阅code)。如果您遵循该代码,您实际上会看到它也执行@browser = browser
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    相关资源
    最近更新 更多