[JAVA] Verwenden Sie Shift Right und Shift Left in Selen richtig

Übersicht in 3 Zeilen

Problem

Wenn Sie keyDown mit Selenium in Java ausführen möchten, schreiben Sie den folgenden Code.

public void sendKey(WebDriver webDriver, CharSequence... keys) {
  WebElement element = webDriver.findElement(By.className("hoge"))
  element.sendKeys(keys);
}

WebElement.sendKeys verwendet CharSequence ... als Argument, verwendet jedoch häufig die angegebene AufzählungKeys. Seien Sie jedoch vorsichtig, wenn Sie links und rechts dieselben Funktionstasten verwenden möchten, z. B. die rechte Umschalttaste / die linke Umschalttaste.

Die Implementierung von enumKeys ist wie folgt. SHIFT / LEFT_SHIFT sind jeweils definiert, aber leider verhält sich das Verhalten der linken Umschalttaste unabhängig davon, welche gesendet wird.

Keys.java


public enum Keys implements CharSequence {
  ...
  SHIFT        ('\uE008'),
  LEFT_SHIFT   (Keys.SHIFT),
  CONTROL      ('\uE009'),
  LEFT_CONTROL (Keys.CONTROL),
  ALT          ('\uE00A'),
  LEFT_ALT     (Keys.ALT),
  LEFT         ('\uE012'),
  ARROW_LEFT   (Keys.LEFT),
  UP           ('\uE013'),
  ARROW_UP     (Keys.UP),
  RIGHT        ('\uE014'),
  ARROW_RIGHT  (Keys.RIGHT),
  DOWN         ('\uE015'),
  ARROW_DOWN   (Keys.DOWN),
  ...
}

Lösung

Keys implementiert CharSequence und der Konstruktor und die Implementierung vontoString ()lauten wie folgt.

Keys.java


public enum Keys implements CharSequence {
  ...

  private final char keyCode;
  private final int codePoint;

  Keys(Keys key) {
    this(key.charAt(0));
  }

  Keys(char keyCode) {
    this.keyCode = keyCode;
    this.codePoint = String.valueOf(keyCode).codePoints().findFirst().getAsInt();
  }

  ...

  @Override
  public String toString {
    return String.valueOf(keyCode);
  }
}

Außerdem kombiniert "WebElement.sendKeys" nur die angegebenen Schlüsselcodes mit Zeilenumbrüchen und sendet sie an WebDriver. Daher wird es normal erkannt, indem es wie unten gezeigt mit einer Zeichenfolge angegeben wird, ohne den in Keys.SHIFT definierten KeyCode zu verwenden.

  WebElement element = webDriver.findElement(By.className("hoge"))
  element.sendKeys("ShiftRight");

Recommended Posts

Verwenden Sie Shift Right und Shift Left in Selen richtig
Verwendung von Abstract Class und Interface in Java richtig
Umgang mit Datum und Uhrzeit in Ruby. Verwenden Sie Datum und Uhrzeit richtig.
Unterschied zwischen getText () und getAttribute () von Selen
Erfassen und speichern Sie die Selen-Installation in Java
Verwendung japanischer Schriftarten und Fremdzeichen in Jasper Report
Verwenden Sie einen anderen TransactionManager für Metadaten und treten Sie in den Spring-Batch ein
Verwenden Sie Variablen für Klassennamen und ID-Namen in haml