Запустите норку с Selenium2 от php

В моем проекте symfony2 я хочу иметь возможность запускать определенные сценарии из моего сервиса, используя тесты Минка с Selenium2, без написания сценариев.

Некоторый абстрактный пример, как я представляю это:

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 запускаются в каком-то браузере, как в Behat, когда вы указываете тег @javascript для сценария behat.

Есть идеи, как это сделать?

1 ответ

Решение

Я нашел решение!

Поэтому я проверил документацию Минка и нашел это. Вы должны создать Selenium2Driver, используя определенный браузер в качестве параметра класса:

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

После этого вам нужно создать сеанс Mink с помощью этого драйвера:

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

И вы можете запустить Mink Scenary из этого сеанса:

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

Удачи!

Другие вопросы по тегам