Sendkeys не работают в Selenium Webdriver

Я не могу поместить какое-либо значение в мое приложение с помощью веб-драйвера. Мое приложение использует фреймы.

Я могу очистить значение моего текстового driver.findElement(By.name("name")).clear(); с помощью driver.findElement(By.name("name")).clear(); , но я не могу поставить какое-либо значение с помощью driver.findElement(By.name("name")).sendKeys("manish"); , Команда click работает для другой кнопки на той же странице.

Ответы

Ответ 1

У меня также была и эта проблема. Но тогда я сделал, чтобы это работало.

myInputElm.click();
myInputElm.clear();
myInputElm.sendKeys('myString');

Ответ 2

Попробуйте щелкнуть текстовое поле перед отправкой ключей.

Возможно, вам нужно инициировать событие в поле перед вводом и, надеюсь, щелчок сделает его

Ответ 3

Используйте javascript, чтобы щелкнуть в поле и , затем используйте sendkeys(), чтобы ввести значения. У меня была аналогичная проблема в прошлом с кадрами. Javascript - лучший способ.

Ответ 4

Попробуйте использовать Javascript для отправки ключей().

WebElement element = driver.findElement(By.name("name"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

Более подробную информацию о Javascript Executor можно найти @ JavascriptExecutor - Selenium

Ответ 5

Управление драйвером первого шага в фрейме с использованием ----

  driver.switchTo().frame("pass id/name/index/webelement");

После этого выполните операцию, которую вы хотите сделать на webelement, находящемся внутри фрейма -

 driver.findElement(By.name("name")).sendKeys("manish");

Ответ 6

Я столкнулся с той же проблемой, когда копирование также не работает для этого текстового поля. Ниже код работает отлично для меня -

WebDriver driver = new FirefoxDriver();
String mobNo = "99xxxxxxxx";
WebElement mobileElementIrs = 
driver.findElement(By.id("mobileNoPrimary"));
mobileElementIrs.click();
mobileElementIrs.clear();
mobileElementIrs.sendKeys(mobNo);

Ответ 7

Нажатие на элемент работает и для меня, однако другое решение, которое я нашел, это ввести значение с помощью JavaScript, который не требует, чтобы элемент имел фокус:

var _element= driver.FindElement(By.Id("e123"));
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("arguments[0].setAttribute('value', 'textBoxValue')", _element);

Ответ 8

У меня тоже была аналогичная проблема, когда я использовал

getDriver().findElement(By.id(idValue)).clear();
getDriver().findElement(By.id(idValue)).sendKeys(text);

Значение в "тексте" не было полностью записано во вход, представьте, что "Patrick" несколько раз записывал "P" еще один "Пэт",... поэтому тест не удался

Что я сделал, чтобы исправить это было обходным путем, и использовать Javascript

((JavascriptExecutor)getDriver()).executeScript("$('#"+idValue+"').val('"+value+"');");

Теперь отлично

Вместо

driver.findElement(By.id("idValue")).sendKeys("text");

использование

((JavascriptExecutor)getDriver()).executeScript("$('#"+"idValue"+"').val('"+"text"+"');");

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

Ответ 9

Я столкнулся с той же проблемой и смог найти для этого следующее решение:

  1. Убедитесь, что элемент находится в фокусе → попробуйте сначала щелкнуть по нему, а затем введите строку.
  2. Если для этого поля ввода есть некоторая анимация, примените некоторое ожидание, а не статическое, вы можете дождаться элемента, который появляется после анимации. (Мой случай)
  3. Вы можете попробовать это с помощью класса Actions.

Ответ 10

Перед sendkeys() используйте метод click() [т.е. в вашем случае: clear(), click(), sendKeys()]

driver.findElement(By.name("name")).clear();
driver.findElement(By.name("name")).click(); // Keep this click statement even if you are using click before clear.
driver.findElement(By.name("name")).sendKeys("manish");

Ответ 11

У меня была такая же проблема. Сначала я предположил и попробовал, как сказал @andyssundaypink. Но это не помогло. Поэтому, когда я добавил sleep на 1 секунду, прежде чем щелкнуть элемент, проблема решилась

Thread.sleep(2000);
element = driver.findElement(...);
element.click();
element.clear();
element.sendKeys('abc');
Thread.sleep(1000);

Ответ 12

Обычно я сохраняю временную переменную. Это должно работать.

var name = element(by.id('name'));
name.clear();
name.sendKeys('anything');

Надеюсь, что это поможет.