【发布时间】:2015-03-05 04:14:58
【问题描述】:
在我们的一项测试中,我们需要确保表单内的选项卡键盘导航以正确的顺序执行。
问题:用量角器检查标签导航顺序的常规方法是什么?
目前我们正在通过对表单中存在的尽可能多的输入字段重复以下步骤来解决这个问题(代码如下):
- 检查当前焦点元素的
ID(使用getId()) - 向当前焦点元素发送
TAB键
这是示例规范:
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());
});
regCodePage 是一个页面对象:
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;
它正在工作,但它不是真正明确和可读的,这使得它难以维护。此外,当前方法中的另一个“气味”是代码重复。
如果当前的方法是您也将采用的方法,我将不胜感激有关使其可重用的任何见解。
【问题讨论】:
标签: javascript testing selenium protractor end-to-end