Trong một trong các thử nghiệm của chúng tôi, chúng tôi cần đảm bảo rằng điều hướng bàn phím tab bên trong biểu mẫu được thực hiện theo đúng thứ tự.Lệnh kiểm tra tab kiểm tra
Câu hỏi: Cách thông thường để kiểm tra thứ tự điều hướng tab bằng thước đo góc là gì?
Hiện nay chúng tôi đang giải quyết nó bằng cách lặp lại các bước sau cho bao nhiêu lĩnh vực đầu vào hiện trong một hình thức (mã dưới đây):
- kiểm tra các
ID
của phần tử hiện tập trung (sử dụnggetId()
) - gửi
TAB
chìa khóa để các yếu tố hiện đang tập trung
Dưới đây là ví dụ spec:
it("should navigate with tab correctly", function() {
var regCodePage = new RegCodePage();
browser.wait(protractor.ExpectedConditions.visibilityOf(regCodePage.title), 10000);
// registration code field has focus by default
expect(regCodePage.registrationCode.getId()).toEqual(browser.driver.switchTo().activeElement().getId());
// focus moved to Remember Registration Code
regCodePage.registrationCode.sendKeys(protractor.Key.TAB);
expect(regCodePage.rememberRegistrationCode.getId()).toEqual(browser.driver.switchTo().activeElement().getId());
// focus moved to Request Code
regCodePage.rememberRegistrationCode.sendKeys(protractor.Key.TAB);
expect(regCodePage.requestCode.getId()).toEqual(browser.driver.switchTo().activeElement().getId());
// focus moved to Cancel
regCodePage.requestCode.sendKeys(protractor.Key.TAB);
expect(regCodePage.cancelButton.getId()).toEqual(browser.driver.switchTo().activeElement().getId());
// focus moved back to the input
regCodePage.cancelButton.sendKeys(protractor.Key.TAB);
expect(regCodePage.registrationCode.getId()).toEqual(browser.driver.switchTo().activeElement().getId());
});
nơi regCodePage
là trang một Object:
var RegCodePage = function() {
this.title = element(by.css("div.modal-header b.login-modal-title"));
this.registrationCode = element(by.id("regCode"));
this.rememberRegistrationCode = element(by.id("rememberRegCode"));
this.requestCode = element(by.id("forgotCode"));
this.errorMessage = element(by.css("div.auth-reg-code-block div#message"));
this.sendRegCode = element(by.id("sendRegCode"));
this.cancelButton = element(by.id("cancelButton"));
this.closeButton = element(by.css("div.modal-header button.close"));
};
module.exports = RegCodePage;
Nó đang làm việc, nhưng nó không phải là thực sự rõ ràng và dễ đọc mà làm cho nó khó khăn để duy trì. Ngoài ra, một "mùi" khác trong cách tiếp cận hiện tại là một sự sao chép mã.
Nếu cách tiếp cận hiện tại là cách bạn cũng sẽ làm điều đó, tôi sẽ đánh giá cao bất kỳ thông tin chi tiết nào về việc làm cho ứng dụng có thể sử dụng lại được.
Sạch hơn và chắc chắn hơn nhiều, cảm ơn bạn! Tôi vẫn sẽ cần phải thử điều này trong thực tế - Tôi sẽ chỉnh sửa câu trả lời nếu nó không hoạt động như vậy. Nhưng, một lần nữa, trông tuyệt vời! – alecxe
Làm việc tuyệt vời như hiện tại. Tôi đã thêm testTabOrder vào thư viện kiểm tra trợ giúp của tôi và nó trông rất sạch sẽ trong các bài kiểm tra.Chúng tôi sẽ cảm ơn bạn nhiều hơn một chút trong tuần này :) – alecxe
Với một số thay đổi đối với thước đo góc của '2.1.0' (được nâng cấp từ '1.7.0'), người dùng rõ ràng phải sử dụng' browser.driver.switchTo(). ActiveElement() .then (...) ', còn gọi là' activeElement' gọi bây giờ là Promise-based. – Dr1Ku