Ответ 1
Я думаю, вы можете попробовать сначала выбрать весь текст в поле, а затем отправить новую последовательность:
from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
В WebDriver, если я использую sendKeys, он добавит мою строку к значению, которое уже существует в этом поле. Я не могу это очистить, используя метод clear(), потому что второй, что я делаю, веб-страница будет вызывать ошибку, говорящую, что она должна быть между 10 и 100. Поэтому я не могу ее очистить или ошибка будет выброшена раньше Я могу добавить новое значение с помощью sendKeys, и если я отправлюKeys, он просто добавит его к уже существующему значению.
Есть ли что-нибудь в WebDriver, позволяющее перезаписать значение в поле?
Я думаю, вы можете попробовать сначала выбрать весь текст в поле, а затем отправить новую последовательность:
from selenium.webdriver.common.keys import Keys
element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "55");
Вы также можете очистить поле перед отправкой его ключей.
element.clear()
element.sendKeys("Some text here")
Хорошо, это было несколько дней назад... В моем текущем случае ответ от ZloiAdun не работает для меня, но приближает меня к моему решению...
Вместо:
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:
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 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");
Это решило мою проблему, когда мне приходилось иметь дело с 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);
Были проблемы с использованием большинства упомянутых методов, поскольку текстовое поле не принимало ввода с клавиатуры, а решение мыши выглядело не полным.
Это сработало для имитации щелчка в поле, выбора содержимого и замены его новым.
Actions actionList = new Actions(driver);
actionList.clickAndHold(WebElement).sendKeys(newTextFieldString).
release().build().perform();
Исходный вопрос говорит, что 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 );
});
},
Найдите элемент, щелкните по нему, очистите его и отправьте ключи.
На этой странице представлен полный пример кода и статья, которая может помочь.
Это легко сделать, и у меня получилось:
//Create a Javascript executor
JavascriptExecutor jst= (JavascriptExecutor) driver;
jst.executeScript("arguments[1].value = arguments[0]; ", 55, driver.findElement(By.id("id")));
55 = присвоенное значение
Что такое эквивалент Ruby для использования clear? поскольку это не работает для меня.