如何为 behat 的一步设置不同的驱动程序?

How can I set different driver for one step in behat?

默认情况下,我 运行 使用痛风进行测试。如何一步设置不同的驱动程序?例如,要在失败的步骤后截取屏幕截图,我需要 selenium 驱动程序。而且我不知道哪一步会失败。

查看 Mink docs, specifically the managing sessions chapter to learn how to change the default driver. If you're not familiar with Behat hooks it's also good to catch up with Hooking into the Test Process 文档。

这是一个如何访问 mink 和更改默认会话的示例。执行该方法后,将通过选择的驱动程序对session对象进行以下所有操作。

use Behat\Behat\Hook\Scope\BeforeStepScope;
use Behat\Behat\Hook\Scope\AfterStepScope;

class MyContext extends RawMinkContext
{
    /**
     * @BeforeStep
     */
    public function before(BeforeStepScope $scope)
    {
        // note that this will be called before EVERY step
        // add logic here if you want to perform it before SOME steps
        // You can't really know if your step will fail though ;)
        $mink = $this->getMink();
        $mink->setDefaultSessionName('selenium');
    }

    public function after(AfterStepScope $scope)
    {
        // here you can inspect $scope to see if your step failed
    }
}

这不是一个完整的解决方案,但如果您真的想追求它,应该会为您指明正确的方向。

但是,我强烈建议您不要这样做

如果您的步骤失败,它已经被执行了。要制作屏幕截图,您需要使用不同的驱动程序再次执行该步骤。此时应用程序的状态很可能会有所不同。您还需要与驱动程序之间的差异作斗争,尝试共享 cookie 等。这不值得付出努力。

相反,只需转储 html。您可以随时在浏览器中显示它。