Behat错误 - 步骤已定义

时间:2016-09-21 05:02:02

标签: php selenium automation selenium-chromedriver behat

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

  @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()

3 个答案:

答案 0 :(得分:2)

在您的情况下,您收到此错误是因为您在FeatureContext中加载了MinkContext两次并通过behat.yml加载。

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

答案 1 :(得分:1)

如果这是您的要求'作为访问者我应该能够加载主页',那么添加以下步骤作为您的方案的第一步:

鉴于我在主页上

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

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

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

请注意 - 小灵黄语句以Given,When和Then的形式书写。您还必须在此处阅读您的方案。

答案 2 :(得分:0)

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

或者将注释放到iAmOnHomepage

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

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