Запустите норку с 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;
}
Удачи!