访问FeaturesContext中的behat.yml变量

时间:2014-09-10 20:17:22

标签: php symfony selenium behat mink

我只想访问screen_shots_path parameter文件中的FeatureContext.php,但写$this->getMinkParameter('screen_shots_path');并不起作用?

任何人都知道怎么做?

提前致谢

我检查了this one,但是extends BehatContext和我的extends MinkContext,所以我混淆了如何应用它。

运动/ behat.yml

default:
    context:
        class: 'FeatureContext'
    extensions:
        Behat\Symfony2Extension\Extension:
            mink_driver: true
            kernel:
                env: test
                debug: true
        Behat\MinkExtension\Extension:
            base_url: 'http://localhost/local/sport/web/app_test.php/'
            files_path: 'dummy/'
            screen_shots_path: 'build/behat/'
            browser_name: 'chrome'
            goutte: ~
            selenium2: ~
    paths:
        features: 'src/Football/TeamBundle/Features'
        bootstrap: %behat.paths.features%/Context

运动/ SRC /足球/ TeamBundle /功能/背景/ FeatureContext.php

namespace Football\TeamBundle\Features\Context;

use Behat\MinkExtension\Context\MinkContext;
use Behat\Mink\Exception\UnsupportedDriverActionException;
use Behat\Mink\Driver\Selenium2Driver;

class FeatureContext extends MinkContext
{
    /**
     * Take screen-shot when step fails.
     * Works only with Selenium2Driver.
     *
     * @AfterStep
     * @param $event
     * @throws \Behat\Mink\Exception\UnsupportedDriverActionException
     */
    public function takeScreenshotAfterFailedStep($event)
    {
        if (4 === $event->getResult()) {
            $driver = $this->getSession()->getDriver();

            if (! ($driver instanceof Selenium2Driver)) {
                throw new UnsupportedDriverActionException(
                    'Taking screen-shots is not supported by %s, use Selenium2Driver instead.',
                    $driver
                );

                return;
            }

            #$directory = 'build/behat';
            $directory = $this->getMinkParameter('screen_shots_path');

            if (! is_dir($directory)) {
                mkdir($directory, 0777, true);
            }

            $filename = sprintf(
                '%s_%s_%s.%s',
                $this->getMinkParameter('browser_name'),
                date('Y-m-d') . '_' . date('H:i:s'),
                uniqid('', true),
                'png'
            );

            file_put_contents($directory . '/' . $filename, $driver->getScreenshot());
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我知道你已经将它标记为Symfony问题,可能会有一些东西影响它,但是从它看起来似乎不是代码,所以问题可能在下面。

假设您使用的是Mink Extension 1.x而不是2.x,screen_shots_path参数不在支持的列表中。实际上2.x也不支持它,但是当它在配置中发现非法时会立即抛出异常。也许1.x不会这样做。您可以看到支持的参数here

最有可能的原因是,screen_shots_path在配置规范化时会被忽略,因此getMinkParameter('screen_shots_path')不会返回任何内容。我敢打赌,如果您对files_path进行同样的尝试,那么您会看到dummy/

如果您希望将配置保留在behat.yml中,则最好将其直接传递给上下文,请参阅documentation

# behat.yml
default:
    context:
        class: FeatureContext
        parameters:
            screen_shots_path: 'build/behat/'

这将传递给构造函数,您可以在其中初始化本地参数。或者,您可以使用静态参数并通过其他上下文访问它。​​

class FeatureContext extends MinkContext
{
    protected $screenShotsPath;

    public function __construct($parameters) 
    {
        $this->screenShotsPath = isset($parameters['screen_shots_path']) ? $parameters['screen_shots_path'] : 'some/default/path';
    }

    public function takeScreenshotAfterFailedStep($event)
    {
        $directory = $this->screenShotsPath;
    }
}