特定のフィールドのテキストが無効な場合に適切なエラーメッセージが表示されることを確認するテストがいくつかあります。有効性の1つのチェックは、特定のtextarea要素が空ではないことです。
このテキストエリアにすでにテキストが含まれている場合、Seleniumにフィールドをクリアするように指示するにはどうすればよいですか?
何かのようなもの:
driver.get_element_by_id('foo').clear_field()
driver.find_element_by_id('foo').clear()
使用できます
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);
最新のSeleniumバージョンでは、次を使用します。
driver.find_element_by_id('foo').clear()
一般的な構文です
driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();
java用
driver.findelement(By.id('foo').clear();
または
webElement.clear();
この要素がテキスト入力要素の場合、これにより値がクリアされます。
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での旅に役立つことを願っています!
.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);