
рд╕рднреА рдХреЛ рд╢реБрдн рджрд┐рди!
рдпрд╣ рд╡рд┐рд╖рдп рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ
рдкреНрд▓рд╕ 1 WAPStart рдЙрддреНрдкрд╛рдж рдХреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рддрдм рд╕реЗ рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╣ рдкреИрдЯрд░реНрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЖрдо рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рд░рд▓ рд░реАрдбрд┐рдВрдЧ рдФрд░ рд╕рдордЭ рдХреЗ рд╕рд╛рде рдЖрддреНрдо-рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрдпрд╛ рд╣реИ
рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдорд╛рд░реНрдЯ рдСрдЯреЛрдореИрдЯрд┐рдХ рдЪреЗрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЯрд░реНрди рд╣реИред рдордгрд┐ рдкреГрд╖реНрда-рд╡рд╕реНрддреБ рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд▓рдЪреАрд▓реЗ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╖рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд╕реНрддрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдкреГрд╖реНрда рдкрд░ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред рдордгрд┐ рд╡рд╢реАрд░-рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдФрд░ рд╕реЗрд▓реЗрдирд┐рдпрдо-рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд░реВрдмреА рдФрд░ рд░рддреНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
RVM рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░реВрдмреА рдФрд░ рд░рддреНрдиреЛрдВ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$ 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
рд╣реИрд▓реЛ, рдкреЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ!
рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдВрдЬреАрдХрд░рдг рдкреЗрдЬ рдмрдирд╛рдПрдБ - рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреЗрдЬрдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбреНрдпреВрд▓ рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рдкреГрд╖реНрда рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдФрд░ рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ:
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
рдкреГрд╖реНрда рдЫрд╣ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдФрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдЙрд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ ... рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ:
DEFAULT_DATA = { 'email' => 'habrahabr@gmail.com', 'password' => 'qwerty', 'source' => ' , WapStart' }
рд╣рдо рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ:
def default(data = {}) populate_page_with DEFAULT_DATA.merge(data) check_agreement register end
рд╕рднреА рдореВрд▓ рдкреГрд╖реНрда рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕реЗрд▓реЗрдирд┐рдпрдо-рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдЙрд╕реЗ рдкреЗрдЬрдСрдмрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкрд╛рд╕ рднреЗрдЬ рджреЗрдВ:
browser = Selenium::WebDriver.for :ff registration_page = RegistrationPage.new(browser, true) registration_page.default
рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдкреЗрдЬ рдХреЛ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдПрдБ:
$ ruby tests/RegisterDefault.rb
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдСрдЯреЛрдЯреИрд╕реНрдЯреНрд╕ рдореЗрдВ рд╣рдо find_element рдФрд░ locators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ, рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдкреЗрдЬ рдПрд▓рд┐рдореЗрдВрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рддрд░реАрдХреЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ
рдПрдХреНрд╕реЗрд╕рд░реНрд╕ - рдкреЗрдЬрдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкреЗрдЬ рдкрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗ рдЧрдПред рддрд░реАрдХреЗ рд╡реЗрдм рдкреЗрдЬ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ
рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рд╕реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ:

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
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")
рд╕рд╣рдмрджреНрдз рдХреЛрдб рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдд: рдЙрджрд╛рд╣рд░рдг:
describe "RegisterUser" do let(:browser) { @browser ||= Selenium::WebDriver.for :ff }
GitHub рдкрд░ рдЙрджрд╛рд╣рд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
$ git clone git@github.com:ivaravko/pageobject-example.git $ cd pageobject-example/ pageobject-example$ rake
рдПрдХ рдкреГрд╖реНрда рдХреЛ рджреВрд╕рд░реЗ рдкреГрд╖реНрда рд╕реЗ рдЦреЛрд▓рдирд╛
рдПрдХ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрдИ рдкреЗрдЬ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реЗрдЬрд┐рд╕реНрдЯреНрд░реЗрд╢рди рдХреНрд▓рд╛рд╕ рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдзрд┐ - LoginPage.new (рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдЯреНрд░реВ) рдореЗрдВ рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
def default(data = {}) populate_page_with DEFAULT_DATA.merge(data) check_agreement register LoginPage.new(browser, true) end
Ivaravko рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛
рдЧрдпрд╛рд╕рдВрджрд░реНрдн
рдордгрд┐ рд▓реЗрдЦрдХ рдХрд╛ рдмреНрд▓реЙрдЧGitHub рдкреЗрдЬрдкреНрд░рд▓реЗрдЦрди