【问题标题】:Behat Mink webdriver session is destroyed after every feature in a suiteBehat Mink webdriver 会话在套件中的每个功能后都被销毁
【发布时间】:2016-12-02 08:49:13
【问题描述】:

我正在尝试使用 behat BDD 和 Mink 使用 selenium webdriver for php 自动化 Sugarcrm 功能。我已经正确安装了它们,并且能够一起运行 behat 和 mink。例如检查登录到sugarcrm 作为一项功能。

现在的问题是当我创建两个功能文件时,分别是 login.feature 和 setup.feature。 Behat 成功地在浏览器中自动执行登录过程,但一旦切换到需要从以前的功能维护登录会话的 setup.feature,它就会破坏会话并返回登录窗口。因此,第二个功能测试总是失败。

如何为我的功能套件中的每个功能维护会话?

只是告诉你们,我也在一个功能文件中尝试过它们作为不同的场景,但没有运气,因为同样的事情正在发生

如果有人知道,请帮助我。

【问题讨论】:

  • 您要为第二个测试用例打开新的浏览器会话吗?
  • 不,我不是。浏览器从第一个功能保持打开状态。但总是在第二个功能启动之前自动注销。这只是意味着每次执行功能后会话都会被破坏

标签: php selenium webdriver behat mink


【解决方案1】:

功能和场景应该独立。如果您在一个场景中执行某项操作,则该状态不会被带到下一个场景,这是预期的行为。

我不确定你想要达到什么目的,但你肯定做错了什么。

编辑:

如果您需要在每个场景之前登录用户,只需编写一个元步骤来执行所有必要的操作:

Given I am logged in

您可以使用step execution chaining 或直接致电 Mink。

如果您的功能文件中的每个场景都需要登录,您可以使用后台:

Background:
    Given I am logged in

Scenario: Listing users
    Given ...

Scenario: Removing a user
    Given ...

【讨论】:

  • 我要做的就是避免在每个场景或功能之前登录应用程序。一遍又一遍地重写相同的代码看起来并不好。你不这么认为吗?
  • 我认为你在滥用 behat。如果您的场景需要登录,则应将其明确定义为一个步骤。您有多种避免重复的方法。阅读有关 Gherkin 语法 (docs.behat.org/guides/1.gherkin.html) 和 Behat 本身的更多信息。但是,我有一种感觉,您正在尝试使用 Behat 编写功能测试。在这种情况下,你最好单独使用 Mink。
  • 是的,我正在尝试使用 behat 编写功能测试,就像大多数人使用 cucumber 和 watir-webdriver read this very good article 一样,我认为这是检查 BDD 框架中不同场景的好方法。跨度>
  • 我没有表达清楚。功能测试没有错,我只认为在很多情况下 Mink 就足够了,而 Behat 给出了开销。我不确定这是否是您的情况,我只是确定您误解了 Behat(或黄瓜)的工作原理(因为您希望在场景之间共享状态)。我更新了我的答案给你更多的提示。
  • 我昨天才实现了背景,在某种程度上它仍然是代码的重复 btw 功能套件 n 是的,我知道 behat 会产生开销,但在我的情况下,大多数功能场景来自不这样做的人想沉迷于php编程。因此,我试图尽可能多地从编程中抽象出来。现在看来,我必须满足于在每个功能文件中重复代码。可能有一天,如果我有时间,我会尝试更深入地研究 behat 框架,以便为自己定制 bt thanx 无论如何,以获取您的建议并花很多时间来回答我的问题
【解决方案2】:

我完全同意 Jakub Zalas 的回答

如果您的目标是在每个功能中消除重复的代码声明背景,我相信您可以使用 hooks 在每个场景之前执行所有必需的操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2012-08-14
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多