78

WebDriverでは、sendKeysを使用すると、フィールドにすでに存在する値に文字列が追加されます。clear()メソッドを使用してクリアすることはできません。これを行うと、Webページは10から100の間でなければならないというエラーをスローします。したがって、クリアできないか、エラーが前にスローされます。 sendKeysを使用して新しい値を入力できます。また、sendKeysを使用すると、すでに存在する値に値が追加されます。

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

4

12 に答える 12

112

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

element.clear()
element.sendKeys("Some text here")
于 2011-04-21T15:29:19.803 に答える
95

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

from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
于 2010-07-15T09:20:25.307 に答える
21

さて、それは数日前です...私の現在の場合、ZloiAdunからの答えは私にはうまくいきませんが、私の解決策に非常に近づきます...

それ以外の:

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

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

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

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

于 2013-11-07T17:18:56.223 に答える
8

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

mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
于 2016-05-26T11:07:49.130 に答える
7

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

element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
于 2014-08-13T17:35:47.807 に答える
2

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

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

inputにtype="file"がある場合、IEではクリアしないでください。空のパスでファイルを見つけようとし、バグをスローします。

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

于 2013-02-19T12:32:20.083 に答える
1

テキストフィールドがキーボード入力を受け入れなかったため、前述の方法のほとんどを使用する際に問題が発生し、マウスソリューションが完全ではないようです。

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

     Actions actionList = new Actions(driver);
     actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
     release().build().perform();
于 2016-07-04T10:14:39.027 に答える
1

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

driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.DELETE), "Your Value");
于 2018-01-04T11:12:45.027 に答える
0

これにより、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);
于 2015-06-05T06:48:25.763 に答える
0

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

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

このページには、役立つ可能性のある完全なコードサンプルと記事があります。

于 2017-09-27T23:00:30.467 に答える
0

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

//Create a Javascript executor

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

55=割り当てられた値

于 2018-08-30T21:34:24.670 に答える
0
 WebElement p= driver.findElement(By.id("your id name"));
 p.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
于 2021-01-25T06:18:10.673 に答える