当前位置: 首页 > 知识库问答 >
问题:

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

诸经略
2023-03-14

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

我发现的两大好处是:

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

2) 因为导航方法(例如goToHomepage())返回后续页面(例如主页)的实例,所以您只需编写代码并查看代码的位置,就可以在测试中导航。

例如。

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

这些好处在Java中非常有效,因为IDE知道对象(或本例中的页面)的类型。

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

有人能告诉我你将如何使用Ruby与页面对象模式来获得这些好处吗?

共有3个答案

林英朗
2023-03-14

通过与同事聊天,我怀疑以下可能是最好的解决方案(但如果存在更好的解决方案,请发布替代答案):

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

因此,在上面的示例中,在页面周围导航时,我们不会返回后续页面的实例(因为返回的页面只是未知类型的对象)。此外,我们需要为我们所处的任何页面创建一个新实例(使用“.new”),这样我们至少可以获得键入“movie\u page”的智能感知优势并查看该页面提供了哪些操作/方法。

有人有更好的解决办法吗?

胡博艺
2023-03-14

我使用菠菜而不是cucumber——它几乎是相同的,但是步骤被包含在该功能文件唯一的类中——所以没有泄漏当前范围之外的对象。

https://github.com/codegram/spinach

卜泓
2023-03-14

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

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),那么所有后续页面都将出现并提供intellisense方法/属性值。

 类似资料:
  • 是否有任何Gem(比如siteprism:用于Web自动化测试)可以在我的移动自动化测试项目中使用,以使用页面对象模型模式定义屏幕。 提前谢谢

  • 除了正常的运行模式,JavaScript 还有第二种运行模式:严格模式(strict mode)。顾名思义,这种模式采用更加严格的 JavaScript 语法。 同样的代码,在正常模式和严格模式中,可能会有不一样的运行结果。一些在正常模式下可以运行的语句,在严格模式下将不能运行。 设计目的 早期的 JavaScript 语言有很多设计不合理的地方,但是为了兼容以前的代码,又不能改变老的语法,只能不

  • 概述 进入标志 如何调用 语法和行为改变 全局变量显式声明 静态绑定 增强的安全措施 禁止删除变量 显式报错 重名错误 禁止八进制表示法 arguments对象的限制 函数必须声明在顶层 保留字 参考链接 概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立”严格模式“的

  • ECMAScript 5 最早引入了“严格模式”(strict mode)的概念。通过严格模式,可以在函数内部选择进行较为严格的全局或局部的错误条件检测。使用严格模式的好处是可以提早知道代码中存在的错误,及时捕获一些可能导致编程错误的ECMAScript 行为。 理解严格模式的规则非常重要,ECMAScript 的下一个版本将以严格模式为基础制定。支持严格模式的浏览器包括IE10+、Firefox

  • 通过测试自动化的页面对象模型,我们将页面链接在一起,如下所示: 这样做的最大好处是,如果开发人员更改主页,使其不再链接到登录页面,我可以更新我的主页类,并在运行测试之前查看所有需要更新的测试(有错误)。 然而,对于小cucumber,上面的每一行将形成一个单独的“步骤”,因此是一个单独的方法。因此,如何才能做到这一点? 将页面对象类的实例(如homePage、loginPage等)放入cross-

  • 主要内容:什么是严格模式,启用严格模式,严格模式中的变化由于 JavaScript 语法不够严谨,一直被人们所诟病,例如在使用一个变量时,可以不使用 var 关键字来提前声明(例如: ),此时 JavaScript 解释器会自动为您创建这个变量。为了使代码更加严谨,JavaScript 中引入了严格模式,一旦使用了严格模式,将不再允许使用那些不严谨的语法。 什么是严格模式 严格模式是在 ECMAScript5(ES5)中引入的,在严格模式下,JavaS