2016-04-09 8 views
1

Ich muss eine Tastenkombination auf Selenium Chrome Treiber durchführen. Die Aktion sendet keinen Test an ein Textfeld oder einen Klick auf eine Schaltfläche.Selenium Chrome Driver senden Tastenkombinationen zum Fenster

Ich bin eigentlich nicht daran interessiert, Schlüssel zu einem bestimmten Web-Element zu senden. Zum Beispiel würde ich gerne Befehl + R (neu laden auf Mac OS) ausführen. (Nachladen ist nur ein Beispiel für die Erklärung, nicht mein Ziel)

Mein Code ist folgende:

public static void keyPressCombnaiton() { 
    Actions action = new Actions(browser); 
    action.keyDown(Keys.COMMAND) 
      .sendKeys("r") 
      .keyUp(Keys.COMMAND) 
      .build() 
      .perform(); 
} 

Ich habe Stunden damit verbringen, suchen und nur bekam kein Glück versuchen.

Jede Hilfe wird geschätzt!

Antwort

1

Die WebDriver spec is element-focussed, und definieren keine Methode Schlüssel an das Fenster zu senden, den Bildschirm, um Browser Chrom - nur auf Elemente.

Verwendung der Selenium Actions Klasse für Cmd - R Arbeiten auf meinem Mac in Firefox (45), aber nur, wenn im Vordergrund laufen - und scheinbar überhaupt nicht in Chrome. Vermutlich ist dies auf Unterschiede in den Implementierungen der Remote-Tastaturimplementierung zurückzuführen, auf die man sich am besten nicht verlassen sollte.


Der effizienteste Weg, und nicht-plattformspezifische Weise, eine Seite neu geladen zu beantragen JavaScript verwendet:

((JavascriptExecutor) driver).executeScript("document.location.reload(true)"); 

Allerdings ist JavaScript lassen Sie nicht „nur Schlüssel senden“.


Der einzige andere Weg ist über die Java AWT Robot-Klasse:

Robot robot = new java.awt.Robot(); 
robot.keyPress(KeyEvent.VK_META); // See: http://stackoverflow.com/a/15419192/954442 
robot.keyPress(KeyEvent.VK_R); 
robot.keyRelease(KeyEvent.VK_R); 
robot.keyRelease(KeyEvent.VK_META); 

Diese „blind“ sendet Tastenkombinationen zu welchen Fenstern/Komponenten auf dem Bildschirm ist zu der Zeit, so dass, wenn Ihre Browser-Fenster wurde versteckt oder minimiert, das wird nicht funktionieren.

+0

Danke für die Hilfe. 1. Damit der Roboter arbeiten kann, muss das aktuelle Fokusfenster das Chrome-Treiberfenster sein. 2. Mein Punkt ist nicht die Seite zu aktualisieren, es führt eine Tastenkombination (immer noch gut zu wissen). 3. Gibt es einen Selen-Weg, um die obige Operation durchzuführen? – Bowen

+0

Ja. Vielleicht sollte ich klarstellen, dass dies ein weiterer Grund ist, den JavaScript-Ansatz zu bevorzugen, vorausgesetzt, Sie wollen die Seite wirklich nur neu laden, und der Cmd-R ist nur ein Beispiel. –

+0

Gibt es einen Selen-Weg, um das zu erreichen? – Bowen

Verwandte Themen