2014-10-27 55 views
0

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

+0

你为什么要用'应该'的方法?它是rspec例子还是什么? – 2014-10-27 20:39:42

回答

0

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

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

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

在你的情况,你有陈述如

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

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

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

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

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

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