Запустите Mink с 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, а затем все мои тесты на норку запускались в каком-нибудь браузере, как в does Behat, когда вы указываете @javascript тег для сценария behat.
Есть идеи, как это сделать?
1 answers
Я нашел решение!
Поэтому я проверил документацию Норки и нашел это. Вы должны создать Selenium2Driver, используя определенный браузер в качестве параметра класса:
$driver = new \Behat\Mink\Driver\Selenium2Driver('firefox');
После этого вам нужно создать сеанс норки с помощью этого драйвера:
$this->session = new Session($driver);
$this->session->start();
И и вы можете запустить сценарий норки из этого сеанса:
$this->session->visit('http://stfalcon.com');
$this->session->getPage()->clickLink('EN');
Если вы хотите создать собственный сценарий, как в 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;
}
Удачи!