我正在尝试从自定义步骤中重定向到网址。这是可行的2.x通过:
return new Step\Then("my/url/page");
很遗憾,您无法在behat 3.0中的自定义步骤中调用外部步骤!
如何在自定义步骤中执行重定向?
答案 0 :(得分:1)
从Behat 3中移除了步骤链,因为它被认为是一种不好的做法。
使用代码工具,如抽象,组合和继承以及简单的方法调用:)链式步骤是一种反模式。很难调试和维护它们。在大多数情况下,使用1-2个方法调用可以完成2-3个链接步骤。
here:
因为只要你开始这样做:
- 无法重构您的上下文
- 无法清楚地看到代码实际执行的内容
- 无法轻易改写您的功能
醇>如果您认为使用内联步骤更容易:
return array(
new Step\Given(‘I am on the homepage’),
new Step\When(‘I follow ”Login”’),
new Step\When(‘I fill ”Username” with “‘ . $username . '"’),
new Step\When(‘I fill ”Password” with “‘ . $password . '"’),
new Step\When(‘I click “Login"’),
);
不是:
$session = $this->getSession();
$page = $session->getPage();
$session->visit($this->locateUrl(‘/‘));
$page->clickLink(‘Login’);
$page->fillField(‘Username’, $username);
$page->fillField(‘Password’, $password);
$page->pressButton(‘Login’);
另见https://github.com/Behat/Behat/issues/546
Behat 3有一个带有步骤链实现的扩展,但它已被破坏,它不太可能得到官方支持:https://github.com/Behat/ChainedStepsExtension
<强>解决方案强>
要解决您的问题,您可以扩展Behat\MinkExtension\Context\RawMinkContext
并使用它来访问会话:
$this->getSession()->visitPath('my/url/page');
您还可以查看the page object extension。