WebDriverでは、sendKeysを使用すると、フィールドに既に存在する値に文字列が追加されます。 clear()メソッドを使用してクリアできないsendKeysを使用して新しい値を入力できます。sendKeysを使用する場合は、既にそこにある値に追加するだけです。
WebDriverには、フィールドの値を上書きできるものがありますか?
最初にフィールド内のすべてのテキストを選択してから、新しいシーケンスを送信してみてください。
from Selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
キーを送信する前にフィールドをクリアすることもできます。
element.clear()
element.sendKeys("Some text here")
OK.
の代わりに:
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
次のコードは私を幸せにします:
element.sendKeys(Keys.HOME, Keys.chord(Keys.SHIFT, Keys.END), "55");
だから、それが誰かを助けることを願っています!
これは私のために働いた。
mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
それが誰かを助ける場合、ZloiAdunの答えに相当するC#は次のとおりです。
element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
これを使用してください。これは信頼できるソリューションであり、すべてのブラウザーでうまく機能します。
protected void clearInput(WebElement webElement) {
// isIE() - just checks is it IE or not - use your own implementation
if (isIE() && "file".equals(webElement.getAttribute("type"))) {
// workaround
// if IE and input's type is file - do not try to clear it.
// If you send:
// - empty string - it will find file by empty path
// - backspace char - it will process like a non-visible char
// In both cases it will throw a bug.
//
// Just replace it with new value when it is need to.
} else {
// if you have no StringUtils in project, check value still empty yet
while (!StringUtils.isEmpty(webElement.getAttribute("value"))) {
// "\u0008" - is backspace char
webElement.sendKeys("\u0008");
}
}
}
入力にtype = "file"がある場合-IEの場合はクリアしないでください。空のパスでファイルを見つけようとし、バグをスローします。
あなたが見つけることができる詳細 私のブログで
以下を使用してください。
driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.DELETE), "Your Value");
テキストフィールドがキーボード入力を受け入れなかったため、前述の方法のほとんどを使用する際に問題があり、マウスの解決策は完全ではないようでした。
これは、フィールド内のクリックをシミュレートし、コンテンツを選択して新しいものに置き換えるために機能しました。
Actions actionList = new Actions(driver);
actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
release().build().perform();
元の質問には、clear()は使用できないと書かれています。これはその状況には当てはまりません。このSO投稿は、値を入力する前に入力をクリアした最初のGoogle結果の1つであったため、ここに作業例を追加します。
ここに追加の制限がない入力については、NodeJSを使用したSeleniumのブラウザーに依存しないメソッドを含めています。このスニペットは、テストスクリプトでvar test = require( 'common' );
を使用してインポートする共通ライブラリの一部です。これは、標準ノードmodule.exports定義用です。
when_id_exists_type : function( id, value ) {
driver.wait( webdriver.until.elementLocated( webdriver.By.id( id ) ) , 3000 )
.then( function() {
var el = driver.findElement( webdriver.By.id( id ) );
el.click();
el.clear();
el.sendKeys( value );
});
},
要素を見つけてクリックし、クリアしてからキーを送信します。
このページには完全なコードサンプルと記事があります 役に立つかもしれません。
これは簡単なことで、私にとってはうまくいきました。
//Create a Javascript executor
JavascriptExecutor jst= (JavascriptExecutor) driver;
jst.executeScript("arguments[1].value = arguments[0]; ", 55, driver.findElement(By.id("id")));
55 =割り当てられた値
これにより、JavaScriptが埋め込まれたHTMLページを処理しなければならなかったときに問題が解決しました
WebElement empSalary = driver.findElement(By.xpath(PayComponentAmount));
Actions mouse2 = new Actions(driver);
mouse2.clickAndHold(empSalary).sendKeys(Keys.chord(Keys.CONTROL, "a"), "1234").build().perform();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].onchange()", empSalary);