0

watir-webdriver スクリプトで page-object gem を使用しようとしていますが、何か不足している可能性があります。

log_in.rb のコードは次のとおりです。

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'

Ruby 1.9 と page-object gem 0.9.2 を使用しています。

手伝ってくれませんか?

また、これらの rb ファイルのそれぞれで、それが参照するクラス ファイルを要求する必要があります。毎回宣言する必要がない方法はありますか?

本当にありがとう。

4

1 に答える 1

3

例外への対処

この例外は、初期化メソッドを再定義するログイン ページに対して発生しています。

class LogIn
  include PageObject

  def initialize(browser)
    @browser = browser
  end
end

PageObject を含めると、特定の初期化メソッドが既に追加されています。あなたのクラスはその初期化をオーバーライドしており、おそらく何かが正しくセットアップされない原因となっています。

メソッドを削除すると、initializeその例外を乗り越えることができます。

ただし、これremember_meは変数/メソッドの例外ではありません。チェックボックスをオンにしたい場合、それはcheck_remember_me.

クラスファイルの要求

通常、テスト ファイルには、すべての page_objects を必要とするファイルが必要です。これは、他の gem やライブラリを必要とする方法と同様の概念です。

たとえば、次のtreatme.rbファイルを作成します。

require 'log_in'
require 'home_page'

必要な順序でファイルを要求すると仮定すると (つまり、他のユーザーが必要とするファイルが最初に要求される)、ページ オブジェクト ファイル (つまり、log_in.rb と home_page.rb) のいずれも要求を実行する必要はありません。

テスト ファイルは、treatme.rb ファイルだけを必要とします。例:

require './treatme'
于 2013-10-20T05:40:26.923 に答える