Кажется, есть много сообщений, жалующихся на то, что keyPress не работает должным образом, а некоторые драйверы вообще его не поддерживают. например.:
Goutte - Keyboard manipulations are not supported by Behat\Mink\Driver\GoutteDriver
Драйвер Selenium, в частности, использует пользовательскую библиотеку js для запуска своих команд, однако, похоже, это не работает. Я безуспешно пытался использовать как $this->getSession()->getDriver()->keyPress()
, так и $element->getPress()
.
https://github.com/Behat/MinkSelenium2Driver/blob/master/src/Behat/Mink/Driver/Selenium2Driver.php#L815
https://github.com/Behat/MinkSelenium2Driver/blob/master/src/Behat/Mink/Driver/Selenium2/syn.js
Что интересно, в кодовой базе Selenium2 еще нет модульных тестов для события keyPress (поэтому я предполагаю, что он в настоящее время находится в разработке).
Итак, на данный момент адекватным решением является использование эмуляции ключевых событий javascript из Возможно ли имитировать события нажатия клавиш программно? (см. альтернативу, если вы не используете jQuery) и функцию Behat Mink's AssessmentScript.
Если вы используете прямой PHPUnit для тестирования:
$key = 'a';
$script = "jQuery.event.trigger({ type : 'keypress', which : '" . $key . "' });";
$this->getSession()->evaluateScript($script);
Или, если вы используете Cucumber, добавьте это в свой файл FeatureContext.php, вы можете добавить эту функцию:
/**
* @Given /^(?:|I ) manually press "([^"]*)"$/
*/
public function manuallyPress($key)
{
$script = "jQuery.event.trigger({ type : 'keypress', which : '" . $key . "' });";
$this->getSession()->evaluateScript($script);
}
И используйте его в своем файле функций следующим образом:
Given I manually press "a"
Что касается использования javascript в качестве решения, некоторые драйверы используют javascript для выполнения требуемого нажатия клавиши. Например.:
https://github.com/Behat/MinkZombieDriver/blob/master/src/Behat/Mink/Driver/ZombieDriver.php#L819
person
Tom
schedule
08.07.2013