Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");

Ответ 2

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

element.clear()
element.sendKeys("Some text here")

Ответ 3

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

Вместо:

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

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

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

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

Ответ 4

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

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

Ответ 5

В случае, если это помогает кому-либо, эквивалент С# ответа ZloiAdun:

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

Это решило мою проблему, когда мне приходилось иметь дело с HTML-страницей со встроенным JavaScript

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

Ответ 9

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

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

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

Ответ 10

Исходный вопрос говорит, что 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 );
    });
},

Найдите элемент, щелкните по нему, очистите его и отправьте ключи.

На этой странице представлен полный пример кода и статья, которая может помочь.

Ответ 11

Это легко сделать, и у меня получилось:

//Create a Javascript executor

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

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

Ответ 12

Что такое эквивалент Ruby для использования clear? поскольку это не работает для меня.