Ruby 使用页面对象检查错误消息的最佳实践

Ruby 使用页面对象检查错误消息的最佳实践,ruby,watir-webdriver,pageobjects,page-object-gem,Ruby,Watir Webdriver,Pageobjects,Page Object Gem,使用页面对象检查错误消息的最佳实践。因此,我在检查各种错误消息的代码中存在重复。我的问题是使用页面对象/Page_对象gem,是否有办法删除此重复?我的代码: def check_error_message expected_text = "The highlighted fields must be filled out correctly." css = "button-error" actual_text = @browser.span(:class, css).text

使用页面对象检查错误消息的最佳实践。因此,我在检查各种错误消息的代码中存在重复。我的问题是使用页面对象/Page_对象gem,是否有办法删除此重复?我的代码:

def check_error_message
  expected_text = "The highlighted fields must be filled out correctly."
  css = "button-error"
  actual_text = @browser.span(:class, css).text

  actual_text.should == expected_text
  puts "Span class '#{css}' expected text: #{expected_text}"
  puts "Span class '#{css}' actual text: #{actual_text}"
end

def check_password_weak_message
  expected_text = "Password is too weak, please choose a different password."
  css = "formError"
  actual_text = @browser.div(:class, css).text

  actual_text.should == expected_text
  puts "Span class '#{css}' expected text: #{expected_text}"
  puts "Span class '#{css}' actual text: #{actual_text}"
end

def check_dupe_email_message
  expected_text = "This email address is already in use by another ID.me account"
  css = "label-error"
  actual_text = @browser.div(:class, css).text

  actual_text.should == expected_text
  puts "Span class '#{css}' expected text: #{expected_text}"
  puts "Span class '#{css}' actual text: #{actual_text}"
end

方法中的变化:预期的文本、css、实际的文本。

页面对象gem在这种情况下对您没有帮助

在您的情况下,我们不要谈论页面对象gem。相反,让我们简单地使用通用术语“页面对象模式”,因为这是页面对象gem实现的

PO模式旨在在测试中的网页和测试代码之间创建一个抽象层

在您的情况下,您有如下声明:

actual_text = @browser.div(:class, css).text
PO模式将把所有像这样的神秘语句放在一个称为“页面对象”的地方。发生这种情况时,您将创建用于与页面交互的方法,而不是直接(经常重复和非描述性)调用Selenium Web驱动程序。这是对PO模式的过度简化,但我不打算在这里解释这一点

使用您创建的这些测试方法,您可以创建一组非常简单的功能测试,这些测试非常容易创建。因此,您可以快速创建它们,但您直观地意识到,您在重复自己,如果您将此测试套件扩展到几百个测试用例,您将陷入一场重大的维护噩梦

因此,您需要投资一些更完整的自动化框架来帮助您。例如,您可以考虑使用Cug、RSPEC、CabyBar或任何其他测试框架来帮助您在单独的位置管理测试数据,并开始添加抽象和特定的职责区域,例如处理错误的类、可以加载测试数据的类(CSV、XML等)。被注入到您的测试用例中

基本上,我开始写一篇关于如何创建自动化框架的指导性文章(书),这远远超出了你的问题范围,正在进入观点领域,等等,这与stackoverflow的意图(一个问题/答案网站与一个论坛,在这里进行讨论、分享观点等)不太相符


我建议你先在这方面投资。当你遇到一个关于宝洁宝石的问题时,发布一个新问题,我们会在这里!:-)

为什么使用
should
方法?它是rspec示例还是什么?