Ruby 是否与严格的页面对象模式兼容?

2022-09-03 14:17:38

我使用带有Java的页面对象模式构建了各种测试自动化框架(https://code.google.com/p/selenium/wiki/PageObjects)。

我发现的两大好处是:

1)当您拥有页面实例时,您可以看到哪些方法可用(例如,键入将显示您可以从主页调用的所有操作/方法)homepage.

2)由于导航方法(例如)返回后续页面(例如主页)的实例,因此您只需编写代码并查看它将您带到哪里即可浏览测试。goToHomepage()

例如:

WelcomePage welcomePage = loginPage.loginWithValidUser(validUser);
PaymentsPage paymentsPage = welcomePage.goToPaymentsPage();

这些好处与Java完美配合,因为对象(在本例中为页面)的类型是 IDE 已知的。

但是,对于 Ruby,对象类型在任何时候都不是固定的,并且通常与 IDE 不明确。因此,我看不出如何在使用Ruby构建的自动化套件上实现这些好处(例如,通过使用Cucumber)。

任何人都可以告诉我您将如何使用Ruby和页面对象模式来获得这些好处?


答案 1

从一些进一步的调查来看,看起来可以使用实例变量来满足初始要求:

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

只要在步骤定义类的某个位置显式创建新的页面对象(在上面的示例中:LaunchPage.new),就会出现所有后续页面并提供智能感知方法/属性值。


答案 2

我使用 Spinach 而不是 Cucumber - 它几乎完全相同,但步骤包含在该功能文件独有的类中 - 因此不会泄漏当前范围之外的对象。

https://github.com/codegram/spinach


推荐