page = LoginPage.new $selenium
page.login_as :name => 'xxx', :password => 'xxx'
不過既然用了Ruby,總要用一些ruby sugar吧,我們定義一個on方法來表達頁面操作的環境:
def on page_type, &block
page = page_type.new $selenium
page.instance_eval &block if block_given?
end
之后我們就可以使用page object的類名常量和block描述在某個特定頁面上操作了:
on LoginPage do
login_as :name => 'xxx', :password => 'xxx'
end
除了行為方法之外,我們還需要在page object上定義一些獲取頁面信息的方法,比如獲取登錄頁面的歡迎詞的方法:
def welcome_message
@driver.get_text 'xpath='
end
這樣測試也可表達得更生動一些:
on LoginPage do
assert_equal 'Welcome!', welcome_message
login_as :name => 'xxx', :password => 'xxx'
end
當你把所有的頁面都用Page Object封裝了之后,就有效地分離了測試和頁面結構的耦合。在測試中,只需使用諸如login_as和add_product_to_cart這樣的業務行為,而不必依靠像id、name等這些具體且易變的頁面元素了。當這些頁面元素發生變化時,只需修改相應的page object就可以了,而原有測試基本不需要太大或太多的改動。
文章來源于領測軟件測試網 http://www.kjueaiud.com/