【问题标题】:Unable to use Data Table Cucumber,无法使用数据表 Cucumber,
【发布时间】:2018-01-19 02:52:55
【问题描述】:

我在登录场景中使用 Cucumber Selenium 和数据表。这是我的场景:

Scenario Outline:  User login

    Given the user is on Login Page
    And   the users enter "<username>" and "<password>" 
       
   Examples:
   | username| password|
   | User_1  | passw123|
   | User_2  | passw123|
第一个用户应该t log out because Im 测试登录用户的限制。 例如: 1.第一个用户登录并停留在一个应用程序中 预期结果:用户成功登录 2.第二个用户尝试登录 预期结果:用户因限制无法登录

但是当使用第二个凭据时,登录页面没有打开,页面刚刚刷新并显示了第一个登录用户的主页(User_1,passw123)。我有断言错误:

Caused by: java.lang.AssertionError: (after 5000 ms)
Expected: "Login Page"
     but: was "Home Page"

如何处理? 谢谢!

【问题讨论】:

  • 在运行第二个场景之前,您需要添加一个注销步骤或在钩子之后执行终止第一个用户的会话。
  • 无法添加此步骤,因为测试是第一个用户没有注销。
  • 您需要使用挂钩或后台步骤来确保在执行登录之前没有用户登录。步骤“然后用户成功登录”仍然有效,因为注销用户的操作是在场景上下文之外执行的。
  • @N.Hol 正如你所说,测试不是注销第一个用户,那么预期的行为应该是什么?我认为场景大纲是测试这种情况的正确方法
  • 你说得对,我不清楚我的问题的描述。现在,我的问题更新了。也许我应该从新的浏览器开始

标签: java selenium cucumber cucumber-java cucumber-junit


【解决方案1】:

您绝对不应该将场景大纲用于此类目的。

你可以做的是:
创建一个测试并将其描述为:
Open login page with new browser And the users enter "User1" and "password1" Open login page with new browser And the users enter "User2" and "password2"

在步骤Open login page with new browser 中,您应该创建新的 webdriver 实例并将其设置为所有其他步骤的主驱动程序。

但在我看来,使用 Selenium 来测试这种身份验证逻辑是错误的想法,因为你不测试任何 UI 行为,你测试的只是服务器端逻辑。因此使用Rest-assured 并通过http 请求测试该逻辑会很方便。

【讨论】:

  • 感谢您的回答!非常有用的建议!
【解决方案2】:

您在第一次测试后退出了吗?如果您保持浏览器打开,最后您需要注销,这样您就回到了登录页面。否则你可能会从登录页面重定向到主页,因为有一个会话处于活动状态。

【讨论】:

  • 测试第一个用户没有注销。
  • 如果第一个用户没有注销,浏览器将转到他们的页面...如果您希望第二个用户再次登录,他们应该从头开始。 (即新浏览器,没有 cookie/会话/其他)
  • 是的,你说得对。对于第二个用户,我应该从新会话开始。谢谢!
  • 如果这回答了你的问题,你能标记答案吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多