运行 来自 php 的 Selenium2 Mink

Run Mink with Selenium2 from php

在我的 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 驱动程序连接起来,然后我的所有 Mink 测试 运行 在某些浏览器中进行,就像当您指定 @javascript[ 时 Behat 一样=22=] behat 场景的标签。

知道怎么做吗?

我找到了解决方案!

所以我查看了 Mink 的文档并找到了 this。您应该使用特定浏览器创建 Selenium2Driver 作为 class 参数:

$driver = new \Behat\Mink\Driver\Selenium2Driver('firefox');

之后您需要使用此驱动程序创建 Mink session:

$this->session = new Session($driver);
$this->session->start();

而且你可以 运行 从这个 session:

$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;
}

祝你好运!