Es scheint eine Menge Beiträge zu geben, die sich darüber beschweren, dass keyPress nicht wie vorgesehen funktioniert und einige Treiber überhaupt nicht unterstützen. z.B .:
Goutte - Keyboard manipulations are not supported by Behat\Mink\Driver\GoutteDriver
Der Selen-Treiber insbesondere verwendet eine benutzerdefinierte js Bibliothek ist es, Befehle auszuführen, es ist jedoch nicht zu funktionieren scheint. Ich habe versucht, die $this->getSession()->getDriver()->keyPress()
und die $element->getPress()
ohne Glück zu verwenden.
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
Was interessant ist, ist, dass es keine Unit-Tests für die keyPress Veranstaltung sind in der Selenium2 Code-Basis noch (so gehe ich davon aus, es ist derzeit in der Entwicklung).
Für den Augenblick ist eine adäquate Lösung, die Javascript-Emulation von Schlüsselereignissen von Is it possible to simulate key press events programmatically? zu verwenden (sehen Sie dies für eine Alternative, wenn Sie jQuery nicht verwenden) und behat Minks evaluateScript-Funktion.
Wenn Sie gerade PHPUnit Test verwenden:
$key = 'a';
$script = "jQuery.event.trigger({ type : 'keypress', which : '" . $key . "' });";
$this->getSession()->evaluateScript($script);
Oder wenn Sie mit Gurke, fügen Sie diese zu Ihrer FeatureContext.php Datei, die Sie diese Funktion hinzufügen:
/**
* @Given /^(?:|I) manually press "([^"]*)"$/
*/
public function manuallyPress($key)
{
$script = "jQuery.event.trigger({ type : 'keypress', which : '" . $key . "' });";
$this->getSession()->evaluateScript($script);
}
Und verwenden Sie es in Ihrer Feature-Datei wie folgt:
Given I manually press "a"
Wie für die Verwendung des Javascript als Lösung, einige der Fahrer verwenden Javascript, um die erforderliche keyPress durchzuführen. Z.B .:
https://github.com/Behat/MinkZombieDriver/blob/master/src/Behat/Mink/Driver/ZombieDriver.php#L819