web-dev-qa-db-ja.com

セレンでテキストエリアからテキストをクリア

特定のフィールドのテキストが無効な場合に適切なエラーメッセージが表示されることを確認するテストがいくつかあります。有効性の1つのチェックは、特定のtextarea要素が空ではないことです。

このテキストエリアにすでにテキストが含まれている場合、Seleniumにフィールドをクリアするように指示するにはどうすればよいですか?

何かのようなもの:

driver.get_element_by_id('foo').clear_field()
111
Isaac
driver.find_element_by_id('foo').clear()
170
Isaac

使用できます

 webElement.clear();

この要素がテキスト入力要素の場合、これにより値がクリアされます。

このイベントによって起動されるイベントは、予想どおりではない場合があることに注意してください。特に、キーボードイベントやマウスイベントは発生しません。キーボードイベントが発生するようにする場合は、sendKeys(CharSequence)などの使用を検討してください。例えば。:

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

または:

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

最新のSeleniumバージョンでは、次を使用します。

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

一般的な構文です

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

java用

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

または

webElement.clear();

この要素がテキスト入力要素の場合、これにより値がクリアされます。

1
vaibhavcool20

Clear()の単純な呼び出しでは、対応するinput/textareaコンポーネントがまだ古い値を持っていることがDOMに表示されるため、そのコンポーネントに対する以降の変更(たとえば、コンポーネントに新しい値を入力する)は時間内に処理されません。

Seleniumのソースコードを見ると、clear()-methodが次のコメントで文書化されていることがわかります。

/ **この要素がテキスト入力要素の場合、これにより値がクリアされます。他の要素には影響しません。テキスト入力要素は、INPUTおよびTEXTAREA要素です。このイベントによって発生するイベントは、予想どおりではない場合があることに注意してください。特に、キーボードイベントやマウスイベントは発生しません。キーボードイベントが発生するようにするには、バックスペースキーで{@link #sendKeys(CharSequence ...)}のようなものを使用することを検討してください。変更イベントを確実に取得するには、タブキーを使用して{@link #sendKeys(CharSequence ...)}を呼び出すことを検討してください。 * /

したがって、この有用なヒントを使用して入力/テキスト領域(既に値を持っているコンポーネント)をクリアし、それに新しい値を割り当てると、次のようなコードが得られます。

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;
}

このコードはJavaであり、Pythonではありません。また、この投稿の方法が長すぎる追加の「waitUntilPageIsReady()-」メソッドをスキップする必要がありました。

これがSeleniumでの旅に役立つことを願っています!

1
ShadowGames

.clear()が機能しないフィールドに遭遇しました。このフィールドでは、最初の2つの答えを組み合わせて使用​​することができました。

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