10

Các phím gửi Selen với Trình điều khiển Chrome thả ký tự "2" và "4". Các nhân vật khác là OK. Khi tôi sử dụng trình duyệt khác (IE hoặc FF), mọi thứ đều ổn.Phím Selenium thả nhân vật bằng Trình điều khiển Chrome

mã:

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

kết quả: hộp đầu vào được làm đầy với

13567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 

Nhân vật 24 đang mất tích, các nhân vật khác được làm đầy một cách chính xác.

Tôi sử dụng Windows 7 64bit, phiên bản Chrome 29.0.1547.57 m, ChromeDriver win32 (v2.2.215849.dyu) - phiên bản mới nhất.

+1

Bạn đã cố gửi chuỗi có nhiều cuộc gọi 'sendKeys' chưa? Có sự khác biệt nào không? – LaurentG

+0

Xem thêm http://stackoverflow.com/questions/18013821/pythons-selenium-send-keys-with-chrome-driver-drops-characters –

Trả lời

7

Điều tra bạn đến từ Cộng hòa Séc, tôi sẽ giả định tự nhiên, bàn phím của bạn được thiết lập sang tiếng Séc làm mặc định.

Tôi cũng gặp một số sự cố lạ với sendKeys khi hệ thống của tôi có bàn phím tiếng Séc làm bàn phím mặc định. Kể từ khi tôi thay đổi mặc định sang tiếng Anh, các vấn đề biến mất.

Nếu điều này không giúp đỡ, xin vui lòng cung cấp thông tin gì sẽ xảy ra nếu bạn cố gắng này:

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

Cùng vấn đề với bàn phím tiếng Nga, tôi đã gửi vấn đề: https: // mã. google.com/p/chromedriver/issues/detail?id=521 – pil0t

2

tôi cũng có kinh nghiệm vấn đề này khi kết nối với một máy ảo sử dụng VNC và sau đó chạy Selenium thử nghiệm như vậy .

VNC thực sự là một trong những ký tự rơi. Khi tôi chuyển sang kết nối trực tiếp tới máy ảo bằng giao diện điều khiển VirtualBox ... nó hoạt động tốt.

1

Đó là câu hỏi cũ nhưng vẫn hợp lệ. Tôi sử dụng Trình điều khiển Chrome phiên bản v2.53.

Có vẻ như các phím đang được gửi từng cái một đến trình duyệt (như một sự kiện phím riêng biệt). Khi nó xảy ra quá nhanh sau đó một trong hai kết quả có thể quan sát được:

  • ký tự được chuyển
  • ký tự bị thiếu

Giải pháp của tôi là như sau:

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

Nó được đáng tin cậy và hoạt động đủ nhanh. Hơn nữa, khi chúng ta muốn xóa trường đầu vào trước khi gửi các khóa thì sự thay đổi sự kiện tương tự có thể xảy ra, e.g:

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

Có thể là các hoạt động rõ ràng sẽ xảy ra trong một trong bốn nơi:

  • trước khi gửi lá thư "a"
  • trước khi gửi chữ "b"
  • trước khi gửi thư "c"
  • sau khi gửi thư "c"

Tôi khuyên bạn nên luôn luôn kiểm tra xem các hoạt động chúng ta vừa thực hiện đã được thực hiện thành công, ví dụ: khi chúng ta muốn xóa trường nhập đó là một thói quen tốt:

  1. kiểm tra giá trị của lĩnh vực đầu vào
  2. nếu giá trị là một chuỗi rỗng sau đó trở về
  3. nếu giá trị không phải là một chuỗi rỗng sau đó gọi clear() chức năng và chờ đợi đến khi giá trị sẽ bằng một chuỗi rỗng

Đó là rất nhiều của operat ion để thực hiện cho một nhiệm vụ đơn giản. Tuy nhiên, nó sẽ làm cho bài kiểm tra ổn định hơn.

2

Tôi gặp vấn đề tương tự. Tôi đã kết thúc việc gọi các sendkey bên trong một vòng lặp cho đến khi giá trị chính xác được chèn vào. Dưới đây là những gì tôi đã làm:

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

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan