Tôi có một ứng dụng đang sử dụng KnockoutJS và tôi đang cố gắng viết một số thử nghiệm kiểm tra biểu mẫu. Nếu bạn không biết KnockoutJS, câu chuyện ngắn cho nó là nó cung cấp các ràng buộc từ quan điểm của tôi với mô hình dữ liệu của tôi. Điều này có nghĩa là khi tôi nhập một giá trị vào trường nhập, đối tượng bên dưới của tôi sẽ tự động được cập nhật với giá trị trường nhập đó. Điều này được thực hiện thông qua một sự kiện thay đổi theo mặc định.WebDriver: Thay đổi sự kiện không kích hoạt
Sự cố tôi gặp phải là khi kiểm tra WebDriver của tôi đang nhập vào trường, sự kiện thay đổi không kích hoạt để mô hình dữ liệu cơ bản của tôi không có giá trị thích hợp. Điều này làm cho việc xác thực biểu mẫu của tôi thất bại khi nó không nên.
Tôi đã làm mọi thứ tôi có thể tìm thấy trên internet để thực hiện công việc này. Tôi đã:
- gửi tab chính
- nhấp chuột từ các trường mẫu
- gửi mã Javascript để bắn tập trung và làm mờ các sự kiện (xác nhận xảy ra trên blur)
- nhấp lĩnh vực hình thức trước khi gõ
- bộ chờ đợi chỉ trong trường hợp đó là một vấn đề thời gian
- thay đổi KnockoutJS để cập nhật trường nhập trên afterkeydown
Không ai trong số này đã làm việc cho tôi. Tôi cần sự giúp đỡ.
Ngoài ra, tôi đã xác minh rằng đây không phải là sự kiện sủi bọt khi tôi xóa tất cả các sự kiện khác một cách rõ ràng, chỉ để lại sự kiện thay đổi KnockoutJS.
cho giải pháp mà tôi đang tìm kiếm là công cụ phù hợp với tất cả trình điều khiển trình duyệt (... ít nhất là trình duyệt IE, FF, Chrome, Safari) và không yêu cầu sử dụng jQuery.
Mọi trợ giúp sẽ được đánh giá cao.
Đây là đoạn mã tương đối Tôi đang sử dụng để gõ giá trị vào trường:
// find element
WebElement input = this.element.findElement(By.className("controls"))
.findElement(By.tagName("input"));
// to set focus?
input.click();
// erase any existing value (because clear does not send any events
for (int i = 0; i < input.getAttribute("value").length(); i++) {
input.sendKeys(Keys.BACK_SPACE);
}
// type in value
input.sendKeys(text);
// to fire change & blur? (doesnt fire change)
//input.sendKeys(Keys.TAB);
// to fire change & blur? (doesnt fire change)
driver.findElement(By.tagName("body")).click();
Vì vậy, nếu tôi hiểu biết, nó cập nhật 'lĩnh vực input' với mỗi đột quỵ quan trọng? – Brian
Hãy tha thứ cho tôi vì đã đặt câu hỏi có khả năng ngớ ngẩn, nhưng trang có đang hoạt động chính xác khi bạn tương tác với nó một cách thủ công trong trình duyệt? tức là nếu bạn xem trang trong trình duyệt, hãy nhập trường văn bản và tab ra khỏi trường văn bản, mô hình có đang được cập nhật không? – RodneyTrotter
@Brian trường nhập được cập nhật bởi người dùng. mô hình dữ liệu cơ bản được cập nhật thành giá trị trong trường đầu vào khi sự kiện onchange kích hoạt (ít nhất nó được cho là). Và nếu tôi thay đổi giá trị cơ bản trong mô hình dữ liệu, trường nhập sẽ được tự động cập nhật thành giá trị mới. Đây là tất cả được cung cấp bởi KnockoutJS. – loesak