wake-up-neo.net

Klartext aus Textfeld mit Selen

Ich habe einige Tests erhalten, bei denen ich prüfe, ob die richtige Fehlermeldung angezeigt wird, wenn Text in bestimmten Feldern ungültig ist. Eine Prüfung auf Gültigkeit ist, dass ein bestimmtes Textarea-Element nicht leer ist.

Wenn dieser Textbereich bereits Text enthält, wie kann ich dann Selenium anweisen, das Feld zu löschen?

so etwas wie:

driver.get_element_by_id('foo').clear_field()
103
Isaac
driver.find_element_by_id('foo').clear()
149
Isaac

Sie können verwenden

 webElement.clear();

Wenn dieses Element ein Texteingabeelement ist, wird der Wert gelöscht.

Beachten Sie, dass die von diesem Ereignis ausgelösten Ereignisse möglicherweise nicht wie erwartet sind. Insbesondere lösen wir keine Tastatur- oder Mausereignisse aus. Wenn Sie sicherstellen möchten, dass Tastaturereignisse ausgelöst werden, sollten Sie etwa sendKeys(CharSequence) verwenden. Z.B.: 

 webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop

oder:

 webElement.sendKeys(Keys.CONTROL + "a");
 webElement.sendKeys(Keys.DELETE);
50
Fenix

Verwenden Sie in der neuesten Selenium-Version Folgendes:

driver.find_element_by_id('foo').clear()

Es ist allgemeine Syntax

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
2
iamsankalp89

für Java 

driver.findelement(By.id('foo').clear();

oder

webElement.clear();

Wenn dieses Element ein Texteingabeelement ist, wird der Wert gelöscht.

0
vaibhavcool20

Ich bin auf ein Feld gestoßen, in dem .clear () nicht funktioniert hat. Die Verwendung einer Kombination der ersten beiden Antworten funktionierte für dieses Feld.

from Selenium.webdriver.common.keys import Keys

#...your code (I was using python 3)

driver.find_element_by_id('foo').send_keys(Keys.CONTROL + "a");
driver.find_element_by_id('foo').send_keys(Keys.DELETE);
0
Jortega

Mit einem einfachen Aufruf von clear () erscheint im DOM, dass die entsprechende Eingabe-/Textbereichskomponente noch ihren alten Wert hat, sodass alle nachfolgenden Änderungen an dieser Komponente (z. B. Füllen der Komponente mit einem neuen Wert) nicht rechtzeitig verarbeitet werden.

Wenn Sie einen Blick in den Selenium-Quellcode werfen, 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 wie erwartet sind. Insbesondere lösen wir keine Tastatur- oder Mausereignisse aus. Wenn Sie sicherstellen möchten, dass Tastaturereignisse ausgelöst werden, sollten Sie in Erwägung ziehen, etwa {@link #sendKeys (CharSequence ...)} mit der Rücktaste zu 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 (eine Komponente, die bereits einen Wert enthält) zu löschen, und Sie ihm einen neuen Wert zuweisen, 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;
}

Es tut uns leid, dass dieser Code Java und nicht Python ist. Außerdem musste ich eine zusätzliche "waitUntilPageIsReady () - Methode auslassen, die diesen Beitrag viel zu lang machen würde.

Hoffe, das hilft dir auf deiner Reise mit Selenium!

0
ShadowGames