10

Selenium sendkeys ze sterownikiem Chrome upuszcza znaki "2" i "4". Inne znaki są OK. Kiedy używam innej przeglądarki (IE lub FF), wszystko jest w porządku.Selenium sendkeys zrzuca postać ze sterownikiem Chrome

Kod:

WebElement name = driver.findElement(localizator); 
name.clear(); 
name.sendKeys("1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 

wynik: pole wprowadzania jest wypełniona

13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 

Postacie 2 i 4 brakuje, inne znaki są wypełnione poprawnie.

Używam Windows 7 64bit, Chrome 29.0.1547.57 m, ChromeDriver win32 (v2.2.215849.dyu) - najnowszego.

+1

Czy próbowałeś wysłać ciąg z wieloma wywołaniami 'sendKeys'? Czy jest jakaś różnica? – LaurentG

+0

Zobacz także http://stackoverflow.com/questions/18013821/pythons-selenium-send-keys-with-chrome-driver-drops-characters –

Odpowiedz

7

Dochodzę również do Ciebie z Republiki Czeskiej, założę się, że twoja klawiatura jest domyślnie ustawiona na język czeski.

Też miałem dziwne problemy z sendKeys, kiedy mój system miał czeską klawiaturę jako domyślną. Ponieważ zmieniłem domyślnie na angielski, problemy zniknęły.

Jeśli to nie pomoże, należy podać informacje co się stanie, jeśli spróbujesz to:

name.sendKeys("2"); 
    name.sendKeys("22222222"); 
    name.sendKeys("4"); 
    name.sendKeys("44444444"); 
    name.sendKeys("424242"); 
+0

Ten sam problem z rosyjską klawiaturą, mam zgłoszony problem: https: // code. google.com/p/chromedriver/issues/detail?id=521 – pil0t

2

ja również doświadczyłem tego problemu w przypadku podłączenia do maszyny wirtualnej za pomocą VNC, a następnie uruchomiony selenu przetestować w ten sposób .

VNC był w rzeczywistości jednym z upuszczanych znaków. Po przeniesieniu do bezpośredniego połączenia z maszyną wirtualną za pomocą konsoli VirtualBox ... działało dobrze.

1

To stare pytanie, ale wciąż aktualne. Używam Chrome Driver v2.53.

Wygląda na to, że klucze są wysyłane jeden po drugim do przeglądarki (np. Oddzielne zdarzenia keyDown). Kiedy zdarza się zbyt szybko, a następnie jeden z dwóch wyników można zaobserwować:

  • znaki są przesunięte
  • znaków brakuje

Moje rozwiązanie jest następujące:

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))); 
    } 
} 

Jest niezawodne i działa wystarczająco szybko. Co więcej, gdy chcemy wyczyścić pole wejściowe przed wysłaniem kluczy, może nastąpić to samo przesunięcie zdarzenia, np.g:

element.clear(); 
element.sendKeys("abc"); 

Jest możliwe, że wyraźna operacja nastąpi w jednym z czterech miejsc:

  • przed wysłaniem literę "a"
  • przed wysłaniem litera "B"
  • przed wysłaniem listu "c"
  • po wysłaniu listu "c"

polecam zawsze sprawdzić, czy operacja my właśnie wykonany został zrealizowany z powodzeniem, np: gdy chcemy wyczyścić pole wprowadzania jest to dobra praktyka, aby:

  1. sprawdzić wartość pola wprowadzania
  2. jeśli wartość jest pusta struna następnie powrócić
  3. jeśli wartość nie jest pustym ciągiem następnie wywołać clear() funkcję i czekać, aż wartość będzie równa pusty ciąg

to dużo operatu jon do wykonania dla prostego zadania. Jednak sprawi to, że test będzie bardziej stabilny.

2

Miałem ten sam problem. Skończyło się na tym, że wołałem sendkeys w pętli, dopóki nie włożono prawidłowej wartości. Oto co zrobiłem:

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); 
} 

Mam nadzieję, że to pomoże.

Powiązane problemy