【问题标题】:Ruby Cucumber - Page Object: How to verify expected error page when try to visit a non-authorized page?Ruby Cucumber - 页面对象:尝试访问非授权页面时如何验证预期的错误页面?
【发布时间】:2016-10-29 02:14:32
【问题描述】:

在我的测试中,我想验证没有正确访问权限的用户应该无法访问某些页面(URL):例如以下 URL 只能由分配了教师角色的用户访问。

   http://learning4fun-xx.com/forteacher/

当用户没有分配教师角色时,例如一个学生,但试图访问上面的这个 URL,这个用户将被引导到下面的 URL/页面,页面上显示一个未经授权的消息。

   http://learning4fun-xx.com/notauthorized/

如何通过使用页面对象来实现?

我的功能文件:

Scenario: User Role test.
   Given I am logged in as a student.
   When I am trying to visit teacher page.
   Then I am not authorized. 

我应该这样做吗?验证什么是正确的测试? (step_definitions)

  Given(/^I am logged in as a student\.$/) do
    visit(LoginPage).login
  end

  When(/^I am trying to visit teacher page\.$/) do
    visit(TeacherPage)
  end

  Then(/^I am not authorized\.$/) do
    visit(NotAuthorizedPage).should_contain_warning_message 'Not Authorized'
  end

上面的步骤通过了,甚至访问(TeacherPage),这让我很困惑。该页面根本不显示,它实际上将用户/学生访问到第二个 URL:

  http://learning4fun-xx.com/notauthorized/

如何测试这种情况?请分享您的想法。

【问题讨论】:

  • visit(TeacherPage) 不包含期望,仅包含操作。重定向到另一个页面也不一定是错误,因此您的测试似乎没有发现失败。不确定您应该写什么,但请参阅 rspec 的 redirect_to matcher - relishapp.com/rspec/rspec-rails/docs/matchers/…
  • 与您的问题无关,但没有充分的理由,当用户不应该能够访问内容时,返回 404 页面而不是未授权页面是安全最佳实践。 “未授权”只是告诉攻击者这是在这个位置值得尝试抓取的多汁的东西。

标签: ruby cucumber pageobjects


【解决方案1】:

您应该在 PageFactory 的 visit_pageon_page 代码中使用 take a look。调用visit(SomePage) 不会对页面上的内容进行任何形式的验证;唯一一次对页面元素进行任何形式的检查是在您调用 PageObject 生成的方法之一时(例如单击、检查存在等)。

如果您希望某个步骤可能失败,则它必须可能发出某种运行时错误。您可以使用 RSpec 期望或 PageObject 的等待方法或其他东西。

如果您希望 visit_page 抛出错误,您必须在名为 initialize_page 的方法中提供您自己的自定义验证码,该方法验证(很可能使用 wait_untilwhen_present 方法)某些相关页面的唯一元素已呈现。

顺便说一句,visit(NotAuthorizedPage) 无论如何都会将浏览器定向到该页面,从而导致通过步骤。你会想要on(NotAuthorizedPage),虽然因为你只是检查文本的存在而不是是否加载了正确的页面,你可以在技术上做on(AnyPageAtAll)

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多