从php运行Mink与Selenium2

时间:2015-10-26 14:06:38

标签: php symfony selenium testing mink

在我的symfony2项目中,我希望能够使用Selenium2中的Mink测试从我的服务中运行特定的风格,而不需要编写风格。

一些抽象的例子我怎么想这个:

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。

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!

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

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

之后,您需要使用此驱动程序创建一个Mink会话:

$this->session->visit('http://stfalcon.com');
$this->session->getPage()->clickLink('EN');

并且你可以从这次会议中运行Mink scenarious:

/**
 * 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;
}

如果要创建Behat FeatureContext中的自定义方案,可以这样做:

void run(uint16_t port) {
    m_server.listen(websocketpp::lib::asio::ip::tcp::v4(), port);
    m_server.start_accept();
    m_server.run();
}
祝你好运!