web-dev-qa-db-ja.com

Selenium WebDriver:フィールドに値を追加する代わりに、Java

WebDriverでは、sendKeysを使用すると、フィールドに既に存在する値に文字列が追加されます。 clear()メソッドを使用してクリアできないsendKeysを使用して新しい値を入力できます。sendKeysを使用する場合は、既にそこにある値に追加するだけです。

WebDriverには、フィールドの値を上書きできるものがありますか?

63
True_Blue

最初にフィールド内のすべてのテキストを選択してから、新しいシーケンスを送信してみてください。

from Selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
78
Sergii Pozharov

キーを送信する前にフィールドをクリアすることもできます。

element.clear()
element.sendKeys("Some text here")
99
Tim Banks

OK.

の代わりに:

element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");

次のコードは私を幸せにします:

element.sendKeys(Keys.HOME, Keys.chord(Keys.SHIFT, Keys.END), "55");

だから、それが誰かを助けることを願っています!

18
ChangeRequest

これは私のために働いた。

mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
7
Guy Engel

それが誰かを助ける場合、ZloiAdunの答えに相当するC#は次のとおりです。

element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
5
Noah Heldman

これを使用してください。これは信頼できるソリューションであり、すべてのブラウザーでうまく機能します。

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の場合はクリアしないでください。空のパスでファイルを見つけようとし、バグをスローします。

あなたが見つけることができる詳細 私のブログで

1
Gadget

以下を使用してください。

driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.DELETE), "Your Value");
1
Akhil

テキストフィールドがキーボード入力を受け入れなかったため、前述の方法のほとんどを使用する際に問題があり、マウスの解決策は完全ではないようでした。

これは、フィールド内のクリックをシミュレートし、コンテンツを選択して新しいものに置き換えるために機能しました。

     Actions actionList = new Actions(driver);
     actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
     release().build().perform();
0
Boris Imenitov

元の質問には、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 );
    });
},

要素を見つけてクリックし、クリアしてからキーを送信します。

このページには完全なコードサンプルと記事があります 役に立つかもしれません。

0
Lance Cleveland

これは簡単なことで、私にとってはうまくいきました。

//Create a Javascript executor

JavascriptExecutor jst= (JavascriptExecutor) driver;
jst.executeScript("arguments[1].value = arguments[0]; ", 55, driver.findElement(By.id("id")));

55 =割り当てられた値

0
nosequeweaponer

これにより、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);
0
Prasanth RJ