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

时间:2014-10-27 20:27:52

标签: ruby watir-webdriver pageobjects page-object-gem

使用页面对象检查错误消息的最佳做法。所以我在我的代码中有重复,我正在检查各种错误消息。我的问题是使用Page Objects / page_objects 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

方法中发生变化的事情:expected_text,css,actual_text。

1 个答案:

答案 0 :(得分:0)

在这种情况下,页面对象gem不会帮助你。

在你的情况下,不要谈论页面对象gem。相反,我们只需使用通用术语“页面对象模式”,就像页面对象gem实现的那样。

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

在您的情况下,您有

等陈述
actual_text = @browser.div(:class, css).text

PO模式会将这样的所有神秘语句放在一个称为“页面对象”的地方。发生这种情况时,您可以创建用于与页面交互的方法,而不是直接(通常是重复的和非描述性的)Selenium Web驱动程序调用。这是对PO模式的过度简化,但我不打算在此解释。

使用您创建的这些测试方法,您可以轻松创建一组非常简单且功能齐全的测试。所以你可以快速创建它们,但你直觉上意识到你正在重复自己,如果你将这个测试套件扩展到几百个测试用例,你将会遇到一个重大的维护噩梦。

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

基本上,我开始写一篇关于如何创建自动化框架的方法文章(书),这超出了你的问题的范围,并进入了意见领域等,这是并没有真正与意图stackoverflow兼容(一个问题/答案网站与一个论坛,在这里讨论,分享意见等)。

我建议你先投资这个领域。当你专门讨论有关PO宝石的问题时,发一个新问题,我们会在这里! : - )