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 の evaluateScript 関数。
テストにストレート 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 を使用して必要な keyPress を実行します。例えば:
https://github.com/Behat/MinkZombieDriver/blob/master/src/Behat/Mink/Driver/ZombieDriver.php#L819