Mit einem einfachen Aufruf von clear () wird im DOM angezeigt, dass die entsprechende Eingabe- / Textbereichskomponente noch ihren alten Wert hat, sodass alle folgenden Änderungen an dieser Komponente (z. B. Füllen der Komponente mit einem neuen Wert) nicht rechtzeitig verarbeitet werden.
Wenn Sie sich den Selen-Quellcode ansehen, werden Sie feststellen, dass die clear () - Methode mit dem folgenden Kommentar dokumentiert ist:
/ ** Wenn dieses Element ein Texteingabeelement ist, wird der Wert gelöscht. Hat keine Auswirkung auf andere Elemente. Texteingabeelemente sind INPUT- und TEXTAREA-Elemente. Beachten Sie, dass die von diesem Ereignis ausgelösten Ereignisse möglicherweise nicht den Erwartungen entsprechen. Insbesondere lösen wir keine Tastatur- oder Mausereignisse aus. Wenn Sie sicherstellen möchten, dass Tastaturereignisse ausgelöst werden, sollten Sie {@link #sendKeys (CharSequence ...)} mit der Rücktaste verwenden. Um sicherzustellen, dass Sie ein Änderungsereignis erhalten, sollten Sie {@link #sendKeys (CharSequence ...)} mit der Tabulatortaste aufrufen. * /
Wenn Sie diesen hilfreichen Hinweis verwenden, um einen Eingabe- / Textbereich (Komponente, die bereits einen Wert hat) zu löschen UND ihm einen neuen Wert zuzuweisen, erhalten Sie Code wie den folgenden:
public void waitAndClearFollowedByKeys(By by, CharSequence keys) {
LOG.debug("clearing element");
wait(by, true).clear();
sendKeys(by, Keys.BACK_SPACE.toString() + keys);
}
public void sendKeys(By by, CharSequence keysToSend) {
WebElement webElement = wait(by, true);
LOG.info("sending keys '{}' to {}", escapeProperly(keysToSend), by);
webElement.sendKeys(keysToSend);
LOG.info("keys sent");
}
private String escapeProperly(CharSequence keysToSend) {
String result = "" + keysToSend;
result = result.replace(Keys.TAB, "\\t");
result = result.replace(Keys.ENTER, "\\n");
result = result.replace(Keys.RETURN, "\\r");
return result;
}
Entschuldigen Sie, dass dieser Code Java und nicht Python ist. Außerdem musste ich eine zusätzliche "waitUntilPageIsReady () - Methode überspringen, die diesen Beitrag viel zu lang machen würde.
Hoffe das hilft dir auf deiner Reise mit Selen!