我只想访问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());
}
}
}
答案 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;
}
}