Как я могу утверждать, что элемент сфокусирован?
Я пытаюсь проверить, установлен ли выбранный элемент при загрузке страницы в качестве одного из моих тестов.
Кажется, это работает, и я могу проверить это с помощью проводника элементов, но Jasmine matchers не справляются с этим.
Вот мой код:
var LoginPage = function () {
this.basePath = browser.params.baseUrl;
this.loginPart = "/#/login";
this.usernameInput = element(by.model('username'));
this.get = function () { ... }
}
it('should focus on the username field on load', function () {
loginPage.get();
expect(loginPage.usernameInput).toBe(browser.driver.switchTo().activeElement());
});
Само поле правильно получает фокус при загрузке страницы (и проводник элементов правильно позволяет мне запросить это через browser.driver.switchTo().activeElement()
, так что я думаю, что этот тест должен пройти, но это не так.
Вместо этого я получаю огромную трассировку стека, которая не предлагает никакой полезной информации.
3 ответа
Я думаю, что нашел обходной путь:
поскольку expect
ожидает вызова с обещанием, вы можете сравнить некоторые атрибуты двух элементов webElements (ваш ввод и текущий activeElement
):
it('should focus on the username field on load', function () {
loginPage.get();
expect(loginPage.usernameInput.getAttribute('id')).toEqual(browser.driver.switchTo().activeElement().getAttribute('id'));
});
Мне удалось найти способ сравнить элемент с целевым, не связываясь ни с какими атрибутами:
element(by.css('div.my-class')).equals(browser.driver.switchTo().activeElement())
.then(equals => expect(equals).toBe(true));
Я закончил тем, что использовал эту милую простую функцию для подтверждения фокуса.
var expectToBeFocused = function(element){
return expect(element.getInnerHtml()).
toBe(browser.driver.switchTo().activeElement().getInnerHtml());
};