下面是我尝试过的几种方法。我没有使用WatirSplash框架,但应用了相同的概念(尽管尝试WatirSplash示例代码可能不是100%准确)。
解决方案1:请返回页面对象
我个人的偏好是没有返回页面对象的页面对象。相反,我发现阅读/处理测试中每个页面对象的显式初始化更容易。 Alister Scott在他的blog中讨论过这个问题。然后
你的测试看起来像:
#For login successful tests
page = App::Page::Login.new
page.login_btn.click
page = App::Page::VehicleSelection.new #The VehicleSelection page is explicitly initialized
page.validate_page #or whatever you want to do with the page
#For login failed tests
page = App::Page::Login.new
page.login_btn.click
page.validate_page #or whatever you want to do with the page
解决方案2:创建登录
另一种解决方案多种方法,将创建两个登录方法 - 一个成功登录,一个用于登录失败。
页面对象可以是:
随着测试是:
#For login successful tests
login_page = App::Page::Login.new
vehicle_page = login_page.login(user, password)
vehicle_page.validate_page #or whatever you want to do with the Vehicle Selection page
#For login failed tests
login_page = App::Page::Login.new
login_page.login_failed(user, password)
login_page.validate_page #or whatever you want to do with the Login page
解决方案3:按钮知道往哪里去
另一种解决方案,将是让登录按钮知道哪个页面重定向到。
页面对象可以是:
module App
module Page
class Login < WatirSplash::Page::Base
url "http://[removed].com"
def login_btn(login_successful=true)
if login_successful
modify button(:id => 'btnLogin'), :click => lambda {redirect_to VehicleSelection}
else
modify button(:id => 'btnLogin'), :click => lambda {redirect_to Login}
end
end
end
end
end
随着测试是:
#For login successful tests
login_page= App::Page::Login.new
vehicle_page = login_page.login_btn.click
vehicle_page.validate_page #or whatever you want to do with the Vehicle Selection page
#For login failed tests
login_page= App::Page::Login.new
login_page.login_btn(false).click
login_page.validate_page #or whatever you want to do with the Login page
感谢您的详细回复。这很有帮助。你提到你没有使用watirsplash框架;哪些是你用过的,你能说一些关于你为什么选择这种方式的话吗? –
对于一个页面对象框架,我一直在使用一个定制的框架。它从[Cheezy的页面对象gem](https://github.com/cheezy/page-object)和[Alister Scott](http://watirmelon.com/2012/06/04/roll-your -own页对象/)。 –