Đó 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:
- kiểm tra giá trị của lĩnh vực đầu vào
- nếu giá trị là một chuỗi rỗng sau đó trở về
- 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.
Nguồn
2017-04-25 16:23:28
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
Xem thêm http://stackoverflow.com/questions/18013821/pythons-selenium-send-keys-with-chrome-driver-drops-characters –