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() и дождитесь, пока значение будет равно пустой строке

Это большая операция для выполнения для простой задачи. Однако это сделает тест более стабильным.