В одном из наших тестов мы должны убедиться, что навигация клавиатуры клавиатуры внутри формы выполняется в правильном порядке.Ввод указателя на вкладку навигации
Вопрос: Что такое обычный способ проверки порядка навигации на вкладке с транспортиром?
В настоящее время мы решаем ее, повторяя следующий шаг для существующих в форме (код ниже), как много полей ввода:
- Проверьте
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;
Это работает, но это не очень явным и читаемым, что делает его трудно поддерживать. Кроме того, еще один «запах» в текущем подходе - это дублирование кода.
Если текущий подход заключается в том, как вы это сделаете, я был бы признателен за понимание того, как сделать его многоразовым.
Много-много более чистых и, безусловно, многоразовых, спасибо! Мне все равно придется попробовать это на практике - я отредактирую ответ, если он не будет работать так, как есть. Но, опять же, выглядит потрясающе! – alecxe
Работает отлично, как есть. Я добавил testTabOrder в мою тестовую библиотеку, и в тестах он выглядит очень чистым.Мы еще немного поблагодарим вас за эту неделю :) – alecxe
С некоторыми изменениями в Protractor с «2.1.0» (обновлен с '1.7.0'), по-видимому, нужно использовать' browser.driver.switchTo(). ActiveElement() .then (...) ', так как вызов' activeElement' теперь основан на Promise. – Dr1Ku