Selenium sendkeys бросает символ с помощью драйвера Chrome
Selenium sendkeys с драйвером Chrome набрасывает символ "2" и "4". Другие символы в порядке. Когда я использую другой браузер (IE или FF), все в порядке.
код:
WebElement name = driver.findElement(localizator);
name.clear();
name.sendKeys("1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ");
результат: поле ввода заполняется
13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Символы 2
и 4
отсутствуют, другие символы заполнены правильно.
Я использую Windows 7 64bit, версию Chrome 29.0.1547.57 m, ChromeDriver win32 (v2.2.215849.dyu) - самый новый.
Ответы
Ответ 1
Исследуя, что вы тоже из Чехии, я собираюсь сделать дикое предположение, что ваша клавиатура настроена на чешский по умолчанию.
У меня также были некоторые странные проблемы с sendKeys
, когда у моей системы была чешская клавиатура по умолчанию. Поскольку я изменил значение по умолчанию на английский, проблемы исчезли.
Если это не поможет, предоставьте информацию о том, что произойдет, если вы попробуете это:
name.sendKeys("2");
name.sendKeys("22222222");
name.sendKeys("4");
name.sendKeys("44444444");
name.sendKeys("424242");
Ответ 2
Я также столкнулся с этой проблемой при подключении к виртуальной машине с помощью VNC, а затем с помощью теста Selenium.
VNC был фактически одним из символов. Как только я перешел к прямому подключению к виртуальной машине с помощью консоли VirtualBox... она работала нормально.
Ответ 3
У меня была такая же проблема. Я закончил вызов sendkeys внутри цикла до тех пор, пока не будет вставлено правильное значение. Вот что я сделал:
WebElement name = driver.findElement(By.xpath(...));
this.sendkeys(name,"yourValue");
private void sendkeys(WebElement ele, String val) throws
InterruptedException
{ ele.clear();
while(true)
{ ele.sendKeys(val);
if(ele.getAttribute("value").equals(val))
break;
else
{ ele.clear();
Thread.currentThread();
Thread.sleep(3000);
}
}
Thread.currentThread();
Thread.sleep(3000);
}
Надеюсь, что это поможет.
Ответ 4
Это старый вопрос, но все же действительный. Я использую Chrome Driver v2.53.
Похоже, что ключи отправляются один за другим в браузер (например, отдельные события keyDown). Когда это происходит слишком быстро, можно наблюдать один из двух результатов:
- символы сдвинуты
- отсутствуют символы
Мое решение таково:
protected void sendKeys(final WebElement element, final String keys) {
for (int i = 0; i < keys.length(); i++){
element.sendKeys(Character.toString(keys.charAt(i)));
waitUntil(attributeContains(element, "value", keys.substring(0, i)));
}
}
Он надежный и работает достаточно быстро. Более того, когда мы хотим очистить поле ввода перед отправкой ключей, может произойти тот же сдвиг события, например:
element.clear();
element.sendKeys("abc");
Возможно, что четкая операция произойдет в одном из четырех мест:
- перед отправкой буквы "a"
- перед отправкой буквы "b"
- перед отправкой буквы "c"
- после отправки буквы "c"
Я рекомендую всегда проверять, была ли успешно выполнена работа, которую мы только что выполнили, например: если мы хотим очистить поле ввода, вам будет полезно:
- проверьте значение поля ввода
- если значение представляет собой пустую строку, верните
- если значение не является пустой строкой, тогда вызовите функцию clear() и дождитесь, пока значение будет равно пустой строке
Это большая операция для выполнения для простой задачи. Однако это сделает тест более стабильным.