在我的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;
}


祝好运!

09-25 17:15