我正在尝试验证焦点元素是否在页面加载时设置为我的测试之一。
这似乎有效,我可以使用元素资源管理器进行验证,但是Jasmine匹配器似乎无法接受这个。
这是我的代码:
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()
查询它,所以我认为这个测试应该通过,但它不是。
相反,我得到了一个巨大的堆栈跟踪,它没有提供任何有用的信息。
答案 0 :(得分:20)
我想我找到了一个解决方法:
由于期望使用promise调用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'));
});
答案 1 :(得分:1)
我最终使用这个很好的简单函数来断言焦点。
var expectToBeFocused = function(element){
return expect(element.getInnerHtml()).
toBe(browser.driver.switchTo().activeElement().getInnerHtml());
};
答案 2 :(得分:0)
我设法找到一种方法来比较一个元素和一个元素而不转发任何属性:
element(by.css('div.my-class')).equals(browser.driver.switchTo().activeElement())
.then(equals => expect(equals).toBe(true));