这是我的专题文件 功能:作为访问者,我应该可以加载主页
@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()
答案 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()
冲突