Как установить "значение" для элемента ввода в вебе с помощью Selenium?
У меня есть элемент в коде, который выглядит следующим образом:
<input id="invoice_supplier_id" name="invoice[supplier_id]" type="hidden" value="">
Я хочу установить для него значение, поэтому я создал веб-элемент с его XPath:
val test = driver.findElements(By.xpath("""//*[@id="invoice_supplier_id"]"""))
Однако теперь я не вижу возможности установить значение для этого элемента...
3 ответ(ов)
Чтобы установить значение поля ввода с помощью Selenium, рекомендуется использовать метод findElement
вместо findElements
. Вот несколько способов сделать это:
Пример с использованием findElement
и метода sendKeys
:
driver.findElement(By.xpath("//input[@id='invoice_supplier_id']")).sendKeys("ваше значение");
Также можно использовать By.id
:
driver.findElement(By.id("invoice_supplier_id")).sendKeys("ваше значение");
Используя JavascriptExecutor
:
Если по каким-то причинам у вас не получается использовать sendKeys
, вы можете установить значение с помощью JavaScript:
WebElement element = driver.findElement(By.xpath("//input[@id='invoice_supplier_id']")); // можно использовать любой локатор
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].value='ваше значение';", element);
Или еще один вариант с помощью executeScript
:
((JavascriptExecutor) driver).executeScript("document.evaluate('xpathExpression', document, null, 9, null).singleNodeValue.innerHTML='ваше значение';");
Пример на JavaScript:
Если вы используете JavaScript, можно также задать значение следующим образом:
driver.findElement(By.xpath("//input[@id='invoice_supplier_id']")).setAttribute("value", "ваше значение");
Надеюсь, это поможет вам решить вашу задачу! 😃
Ваша проблема в том, что метод setAttribute()
больше не доступен для объектов типа WebElement
в Selenium. Вместо этого вы можете использовать метод sendKeys()
, чтобы установить значение поля ввода. Вот пример того, как это можно сделать:
WebElement element = driver.findElement(By.id("invoice_supplier_id"));
element.clear(); // очистка поля перед вводом
element.sendKeys("ваше значение");
Если вам нужна именно установка значения прямо в HTML-атрибут, вы можете использовать JavaScript через JavascriptExecutor
:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute('value', arguments[1])", element, "ваше значение");
Этот способ позволяет установить атрибут value
у элемента, даже если setAttribute()
не доступен через API Selenium.
Как указал Шубхам Джайн, это работает для меня: driver.findElement(By.id("invoice_supplier_id")).sendKeys("value", "new value");
Получение HTML-источника WebElement в Selenium WebDriver с использованием Python
Инициализация ArrayList в одну строчку
Почему нет ConcurrentHashSet, если есть ConcurrentHashMap?
Создание репозитория Spring без сущности
Как сгенерировать уникальный хеш-код для строкового ввода в Android?