在我的symfony2项目中,我希望能够使用Mink测试和Selenium2在我的服务中运行特定的方案,而无需编写behat方案。
我如何想象这个抽象示例:
class MyService extends MinkContext
{
/**
* @var Mink $mink Mink
*/
private $mink;
/**
* Set up
*/
public function setUp()
{
$this->mink = new Mink();
$this->mink->setUp($this->createSeleniumDriver());
}
/**
* Run scenario
*/
public function runScenario()
{
$this->visit('http://google.com.com');
$this->pressButton('Google Search');
}
}
因此,我希望能够将Mink与Selenium驱动程序连接,然后在为behat场景指定@javascript标记时,我的所有Mink测试都在某些浏览器中运行,就像在Behat中一样。
任何想法如何做到这一点?
最佳答案
我找到了解决方案!
因此,我查看了Mink的文档并找到了this。您应该使用特定的浏览器作为类参数来创建Selenium2Driver:
$driver = new \Behat\Mink\Driver\Selenium2Driver('firefox');
之后,您需要使用以下驱动程序创建一个Mink会话:
$this->session = new Session($driver);
$this->session->start();
并且,您可以从此会话中运行Mink方案:
$this->session->visit('http://stfalcon.com');
$this->session->getPage()->clickLink('EN');
如果要创建像Behat FeatureContext这样的自定义场景,可以这样:
/**
* Clink on element with css
*
* @param string $element Element pattern
*
* @throws ElementNotFoundException
*/
public function iClickOn($element)
{
$element = $this->fixStepArgument($element);
$selectedElement = $this->getSession()->getPage()->find('css', $element);
if (!$selectedElement) {
throw new \InvalidArgumentException(sprintf('Cannot find element with selector: "%s"', $element));
}
$selectedElement->click();
}
/**
* Returns fixed step argument (with \\" replaced back to ").
*
* @param string $argument
*
* @return string
*/
protected function fixStepArgument($argument)
{
return str_replace('\\"', '"', $argument);
}
/**
* Get session
*
* @return Session Session
*/
public function getSession()
{
return $this->session;
}
祝好运!