
すべての人に良い一日を!
このトピックは、 Plus1 WapStart製品のWebインターフェイスをテストする方法に関するものです。 ページオブジェクトを使用するのは このパターンは実際のタスクと多くの共通点があり、簡単な読み取りと理解でセルフテストを書くことができます。
ページオブジェクトとは
ページオブジェクトは、スマート自動チェックを実装するためのパターンです。 gem page-objectは、ブラウザアプリケーションをテストするためのオブジェクトを含む柔軟なページを作成するのに役立つこのパターンの実装です。 一番下の行は、抽象化のレベルを作成してテストとテストサブジェクトを分離し、ページ上の要素に簡単なインターフェイスを提供することです。 Gemはwatir-webdriverおよびselenium-webdriverで動作します。
Rubyとgemをインストールする
RVMをインストールします。
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
サンプルを実行するには、最新バージョンのRubyおよびgemが必要です。
$ rvm reload $ rvm install ruby-1.9.3-p125 $ rvm gemset create page-object && rvm use ruby-1.9.3-p125@page-object $ gem install rake page-object
こんにちは、Page Object!
登録ページのRegistrationPageを作成します-これを行うには、PageObjectモジュールをオンにして、ページアドレスを指定し、要素を記述します。
class RegistrationPage include PageObject page_url "http://www.passport.wapstart.ru/registration/" text_field(:email, :name => 'mail') text_field(:password, :id => 'hidden-password') select_list(:source, :name => 'informationSource') checkbox(:agreement, :name => 'agreement') button(:register, :name => "register") end
このページでは、6つのメソッドについて説明します。各メソッドは、さらにいくつかのメソッドを生成し、後でさらに生成します...デフォルトデータを追加します。
DEFAULT_DATA = { 'email' => 'habrahabr@gmail.com', 'password' => 'qwerty', 'source' => ' , WapStart' }
必須フィールドのみに入力するメソッドを作成します。
def default(data = {}) populate_page_with DEFAULT_DATA.merge(data) check_agreement register end
すべての基本的なページオブジェクトが定義され、自動テストで使用します。 PageObjectコンストラクターに渡すことにより、selenium-webdriverドライバーを選択します。
browser = Selenium::WebDriver.for :ff registration_page = RegistrationPage.new(browser, true) registration_page.default
引数trueはpage_urlを開きます。リンクをクリックしてこのページに到達した場合、それを渡すことはできません。 サンプルを実行します。
$ ruby tests/RegisterDefault.rb
したがって、自動テストではfind_elementとロケーターの使用を避け、コードは読みやすく再利用可能です。
ページ要素のアクセス方法を動的に生成する
アクセサ-PageObjectモジュールを接続することでページに追加されるクラスメソッド。 メソッドは、Webページ要素へのアクセスを提供するメソッドの別のセットを生成します。

完全に記述された登録ページの例:
require 'page-object' require 'selenium/webdriver' class RegistrationPage include PageObject page_url "http://www.passport.wapstart.ru/registration/" DEFAULT_DATA = { 'email' => 'habrahabr@gmail.com', 'password' => 'qwerty', 'source' => ' , WapStart' } text_field(:email, :name => 'mail') text_field(:password, :id => 'hidden-password') checkbox(:showPassword, :id => 'showPassword') select_list(:source, :name => 'informationSource') text_field(:fio, :name => 'fio') text_field(:phone, :name => 'phone') select_list(:purpose, :name => 'registrationPurpose') checkbox(:haveCode, :id => 'havePartnerCode') text_field(:code, :id => 'plus1PartnerCode') checkbox(:agreement, :name => 'agreement') button(:register, :name => "register") # Exception span(:errorCode, :xpath => "//form[@id='registrationForm']/table/tbody/tr[9]/td[2]/span/span[2]") def default(data = {}) populate_page_with DEFAULT_DATA.merge(data) check_agreement register end end
アフィリエイトコードの有効性をチェックするための自動テストの例:
describe "RegisterUser" do let(:browser) { @browser ||= Selenium::WebDriver.for :ff } #Initialize new instance of Browser(driver) it "InvalidCode" do page = RegistrationPage.new(browser, true) page.email = 'habrahabr@gmail.com' page.password = 'qwerty' page.source = ' , WapStart' page.check_haveCode page.code = 12345678 page.check_agreement page.register page.errorCode?.should be_true end after { browser.close } end
サンプルはGitHubで入手できます 。
$ git clone git@github.com:ivaravko/pageobject-example.git $ cd pageobject-example/ pageobject-example$ rake
別のページからページを開く
大規模プロジェクトでは多くのページがあり、それらは相互接続されており、移行を実行するために、RegistrationPageクラスのデフォルトメソッドであるLoginPage.new(ブラウザ、true)に次のステップを追加します。 これにより、自動テストを変更せずにログインおよびパスワード入力ページに移動できます。
def default(data = {}) populate_page_with DEFAULT_DATA.merge(data) check_agreement register LoginPage.new(browser, true) end
投稿者: ivaravko
参照資料
宝石の著者のブログGitHubページ
ドキュメント