Cha*_*man 15 ruby java testing automation pageobjects
我使用Page Object Pattern with Java(https://code.google.com/p/selenium/wiki/PageObjects)构建了各种Test Automation框架.
我发现的两大好处是:
1)当你有一个页面实例时,你可以看到可用的方法(例如,输入homepage.会显示你可以从主页调用的所有动作/方法)
2)因为导航方法(例如goToHomepage())返回后续页面的实例(例如主页),所以您只需编写代码并查看它所在的位置即可浏览您的测试.
例如
WelcomePage welcomePage = loginPage.loginWithValidUser(validUser);
PaymentsPage paymentsPage = welcomePage.goToPaymentsPage();
Run Code Online (Sandbox Code Playgroud)
这些好处与Java完美配合,因为IDE已知对象类型(或本例中的页面).
但是,使用Ruby,对象类型在任何时候都不固定,并且通常对IDE不明确.因此,我无法看到如何在使用Ruby构建的自动化套件中实现这些优势(例如,使用Cucumber).
谁能告诉我如何使用Ruby与页面对象模式来获得这些好处?
从进一步的调查来看,似乎可以使用实例变量来满足初始要求:
Given(/^I am on the launch page$/) do
@launch_page ||= LaunchPage.new
end
When(/^I open the set alarm time page$/) do
@set_alarm_page = @launch_page.goto_set_alarm_page
end
When(/^I open our apps from the home page$/) do
@launch_page.navigation_toolbar.open_our_apps
end
Then(/^I should see the homepage alarm time is (\d+)$/) do |alarm_time|
alarm_time_actual = @launch_page.get_alarm_time
assert_equal(alarm_time, alarm_time_actual)
end
Run Code Online (Sandbox Code Playgroud)
只要在步骤定义类的某个位置显式创建新的页面对象(在上面的示例中:LaunchPage.new),就会出现所有后续页面并提供智能感知方法/属性值.
我使用Spinach而不是Cucumber - 它几乎相同,但步骤被包含在该特征文件所特有的类中 - 因此不会泄漏当前范围之外的对象.
https://github.com/codegram/spinach
通过与同事聊天,我怀疑以下可能是最好的解决方案(但如果存在更好的解决方案,请发布替代答案):
When(/^I buy a movie from the movie page$/) do
movie_page = MoviePage.new
movie_page.buyMovie("Test Movie")
purchase_page = PurchasePage.new
purchase_page.confirmPurchase
end
Run Code Online (Sandbox Code Playgroud)
因此,在上面的示例中,我们在页面导航时不会返回后续页面的实例(因为返回的页面只是未知类型的对象)。此外,我们需要为我们所在的任何页面创建一个新实例(使用“.new”),以便至少可以获得键入“movie_page”的智能感知优势。并查看该页面可以执行哪些操作/方法。
有人有更好的解决方案吗?