Selenium WebDriver: я хочу перезаписать значение в поле вместо добавления к нему с помощью sendKeys с использованием Java - PullRequest
63 голосов
/ 14 июля 2010

В WebDriver, если я использую sendKeys, он добавит мою строку к значению, которое уже существует в поле. Я не могу очистить его с помощью метода clear (), потому что во второй раз, когда я это делаю, веб-страница выдаст ошибку, говорящую, что она должна быть между 10 и 100. Поэтому я не могу очистить ее, иначе ошибка будет выдана Я могу добавить новое значение с помощью sendKeys, и если я отправлю sendKeys, он просто добавит его к уже существующему значению.

Есть ли в WebDriver что-нибудь, что позволяет перезаписывать значение в поле?

Ответы [ 11 ]

98 голосов
/ 21 апреля 2011

Вы также можете очистить поле перед отправкой ключей.

element.clear()
element.sendKeys("Some text here")
76 голосов
/ 15 июля 2010

Я думаю, что вы можете попытаться сначала выделить весь текст в поле, а затем отправить новую последовательность:

from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
18 голосов
/ 07 ноября 2013

Хорошо, это несколько дней назад ... В моем текущем случае ответ от ZloiAdun не работает для меня, но приближает меня к моему решению ...

Вместо:

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

следующий код делает меня счастливым:

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

Надеюсь, это кому-нибудь поможет!

7 голосов
/ 26 мая 2016

Это сработало для меня.

mElement.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),MY_VALUE);
5 голосов
/ 13 августа 2014

В случае, если кому-то это поможет, Clo-эквивалент ответа ЗлойАдуна:

element.SendKeys(Keys.Control + "a");
element.SendKeys("55");
1 голос
/ 04 января 2018

Используйте следующее:

driver.findElement(By.id("id")).sendKeys(Keys.chord(Keys.CONTROL, "a", Keys.DELETE), "Your Value");
1 голос
/ 19 февраля 2013

Используйте это, это надежное решение и хорошо работает для всех браузеров:

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.Он попытается найти файл по пустому пути и выдаст ошибку.

Более подробную информацию вы можете найти в моем блоге

0 голосов
/ 31 августа 2018

Это легко сделать, и у меня это сработало:

//Create a Javascript executor

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

55 = присвоенное значение

0 голосов
/ 28 сентября 2017

Исходный вопрос говорит, что clear () не может быть использован. Это не относится к этой ситуации. Я добавляю свой рабочий пример, так как этот пост был одним из первых результатов Google по очистке ввода перед вводом значения.

Для ввода, где нет никаких дополнительных ограничений, я включаю независимый от браузера метод Selenium с использованием NodeJS. Этот фрагмент является частью общей библиотеки, которую я импортирую с 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 голосов
/ 04 июля 2016

При использовании большинства из перечисленных методов возникли проблемы, поскольку в текстовом поле не был принят ввод с клавиатуры, а решение с мышью кажется неполным.

Это сработало для имитации щелчка в поле, выбора содержимого и замены его новым.

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