0

Как установить "значение" для элемента ввода в вебе с помощью Selenium?

11

У меня есть элемент в коде, который выглядит следующим образом:

<input id="invoice_supplier_id" name="invoice[supplier_id]" type="hidden" value="">

Я хочу установить для него значение, поэтому я создал веб-элемент с его XPath:

val test = driver.findElements(By.xpath("""//*[@id="invoice_supplier_id"]"""))

Однако теперь я не вижу возможности установить значение для этого элемента...

3 ответ(ов)

0

Чтобы установить значение поля ввода с помощью 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", "ваше значение");

Надеюсь, это поможет вам решить вашу задачу! 😃

0

Ваша проблема в том, что метод 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.

0

Как указал Шубхам Джайн, это работает для меня: driver.findElement(By.id("invoice_supplier_id")).sendKeys("value", "new value");

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь