【问题标题】:Behat error - step is already definedBehat 错误 - 步骤已定义
【发布时间】:2017-01-29 04:39:14
【问题描述】:

这是我的功能文件 功能:作为访问者,我应该能够加载主页

  @javascript @program
  Scenario: View first page
    When I fill in the following:
      | username | myusername |
      | password | mypass |
    And press "Login"
    Then I should see "Dashboard"
    Then I go to "/programs/list"

我的 composer.json 如下:

{
    "require": {
        "behat/mink-extension": "^2.2",
        "behat/mink-goutte-driver": "^1.2",
        "behat/mink-selenium2-driver": "^1.3"
    }
}

我的 behat.yml 文件如下:

default:
  extensions:
    Behat\MinkExtension:
      base_url: http://myURL.com
      selenium2: ~
      browser_name: 'chrome'
  suites:
      defaults:
          contexts:
              - FeatureContext
              - Behat\MinkExtension\Context\MinkContext

我的 FeatureContext.php 文件为

class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext
{
   //
    /**
     * Initializes context.
     *
     * Every scenario gets its own context instance.
     * You can also pass arbitrary arguments to the
     * context constructor through behat.yml.
     */
    public function __construct()
    {
        $this->driver = new \Behat\Mink\Driver\Selenium2Driver('chrome');
        $this->session = new \Behat\Mink\Session($this->driver);
        $this->session->start();
    }
    public function iAmOnHomepage($arg1)
    {
        $this->getSession()->visit($this->locatePath('http://myURL.com'));
    }
    /**
     * @When |I fill in :arg1 with :arg2
     */
    public function iFillInWith($username, $password)
    {
        $MinkContext = new MinkContext;
        $MinkContext -> assertFieldContains ("username" , $username);
        $MinkContext -> assertFieldContains ("password" , $password);
        $this->driver->close();
    }
}

我收到以下错误:

 FeatureContext::iAmOnHomepage()  
 Behat\MinkExtension\Context\MinkContext::iAmOnHomepage() And press
 "Login"   Step "/^(?:|I )am on (?:|the )homepage$/" is already defined
 in FeatureContext::iAmOnHomepage()

【问题讨论】:

    标签: php selenium automation selenium-chromedriver behat


    【解决方案1】:

    重命名public function iAmOnHomepage($arg1)信息,例如public function IAmAtHomepage($arg1)

    或者给iAmOnHomepage打注

    /**
     * @When I am on Homepage with :arg1
     */
    

    现在的问题似乎是函数名自动解析为条件与内部条件Behat\MinkExtension\Context\MinkContext::iAmOnHomepage()

    【讨论】:

      【解决方案2】:

      在您的情况下,您收到此错误是因为您在 FeatureContext 和波谷 behat.yml 中加载 MinkContext 两次。

      如果您使用 MinkContext 扩展 FeatureContext,那么您不必在 behat.yml 中声明 MinkContext。
      从 behat.yml 中删除行 Behat\MinkExtension\Context\MinkContext 应该可以解决您的问题。

      【讨论】:

        【解决方案3】:

        如果这是您的要求“作为访问者,我应该能够加载主页”,那么在您的场景中添加以下步骤作为您的第一步:

        鉴于我在主页上

        FeatureContext 文件中删除函数iAmOnHomepage(),因为这已经是Mink 可用的标准函数。这会产生冲突。或者更改您的函数名称。

        public function iFillInWith($username, $password)
        {
            $MinkContext = new MinkContext;
            $MinkContext -> assertFieldContains ("username" , $username);
            $MinkContext -> assertFieldContains ("password" , $password);
            $this->driver->close();
        }
        

        我认为您不需要上述步骤。您只是在此处声明字段,而不是在功能文件中的任何位置使用此功能。

        请注意 - Gherkin 语句以 Given、When 和 Then 的形式编写。您还必须在此处使您的场景可读。

        【讨论】:

          猜你喜欢
          • 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
          相关资源
          最近更新 更多