Selenium WebDriver: я хочу перезаписать значение в поле вместо добавления к нему с помощью sendKeys с помощью Java
в WebDriver, если я использую sendKeys он добавит мою строку к значению, которое уже существует в поле. Я не могу очистить его с помощью метода clear (), потому что во второй раз, когда я это сделаю, веб-страница выдаст ошибку, сказав, что она должна быть между 10 и 100. Поэтому я не могу очистить его или ошибка будет выброшена, прежде чем я смогу ввести новое значение с помощью sendKeys, и если я sendKeys он просто добавляет его к значению уже там.
есть ли что-нибудь в WebDriver, что позволяет вам перезаписать значение в поле?
11 ответов:
Я думаю, вы можете попробовать сначала выделить весь текст в поле, а затем отправить новую последовательность:
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");
Так что я надеюсь, что это поможет кому-то!
в случае, если это кому-то поможет, эквивалент C# ответа 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'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"); } } }
если ввод имеет тип= "файл" - не очищайте его для 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);
были проблемы с использованием большинства из упомянутых методов, так как textfield не принимал ввод с клавиатуры, и решение мыши кажется не полным.
это сработало для имитации щелчка в поле, выбора содержимого и замены его новым.
Actions actionList = new Actions(driver); actionList.clickAndHold(WebElement).sendKeys(newTextFieldString). release().build().perform();
исходный вопрос говорит, что clear () не может быть использован. Это не относится к данной ситуации. Я добавляю свой рабочий пример здесь, поскольку это сообщение SO было одним из первых результатов Google для очистки ввода перед вводом значения.
для ввода, где нет дополнительных ограничений, я включаю агностический метод браузера для Селена с использованием NodeJS. Этот фрагмент является частью общей библиотеки, которую я импортирую с помощью VAR test = require ('common'); в моих тестовых сценариях. Это для стандартный модуль узла.определение экспорта.
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 ); }); },
найдите элемент, щелкните его, очистите и отправьте ключи.
На этой странице есть полный пример кода и статья что может помочь.