Angularjs 如何断言一个元素是聚焦的?

Angularjs 如何断言一个元素是聚焦的?,angularjs,selenium,jasmine,protractor,Angularjs,Selenium,Jasmine,Protractor,我试图验证聚焦元素是否作为我的测试之一设置在页面加载上 这似乎是可行的,我可以用元素浏览器进行验证,但Jasmine matchers似乎没有意识到这一点 这是我的密码: var LoginPage = function () { this.basePath = browser.params.baseUrl; this.loginPart = "/#/login"; this.usernameInput = element(by.model('username'));

我试图验证聚焦元素是否作为我的测试之一设置在页面加载上

这似乎是可行的,我可以用元素浏览器进行验证,但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());
});
当页面加载时,字段本身正确地获得焦点(元素资源管理器允许我通过
浏览器.driver.switchTo().activeElement()
正确地查询该字段),因此我认为该测试应该通过,但它没有通过


相反,我得到了一个巨大的stacktrace,它不提供任何有用的信息。

我想我找到了一个解决办法:

由于
expect
期望使用承诺调用,因此您可以比较两个WebElement(您的输入和当前的
activeElement
)的某些属性:


我最终使用了这个简单的函数来声明焦点

var expectToBeFocused = function(element){
  return expect(element.getInnerHtml()).
    toBe(browser.driver.switchTo().activeElement().getInnerHtml());
};

我设法找到一种方法,在不传递任何属性的情况下,将元素与聚焦元素进行比较:

element(by.css('div.my-class')).equals(browser.driver.switchTo().activeElement())
    .then(equals => expect(equals).toBe(true));

expect(browser.driver.switchTo().activeElement()).toBe(loginPage.usernameInput)
?@ivarni-我得到
错误:用WebElement参数调用expect,期望得到一个承诺。你的意思是使用.getText()?
而不是大堆栈跟踪。好的,我想问题可能是
.switchTo().activeElement()
产生了某种异步的副作用,直到expect被评估之后,焦点才真正改变,但当时情况并非如此。谢谢-我想我可以做类似的事情,只是希望有一种不依赖属性测试元素相等性的方法。我想这可以做同样的工作,但它也依赖于我想我可能可以做
.getInnerHtml()
.getOuterHtml()
来达到同样的效果。我明白,这就是为什么我说这只是一个解决办法;)。是的,如果您愿意,您也可以比较内部或外部HTML。Hey@glepretre,如果您有时间,请在此处查看解决方案的后续内容:。谢谢这不是输入元素的解决方案:它每次都是空的
element(by.css('div.my-class')).equals(browser.driver.switchTo().activeElement())
    .then(equals => expect(equals).toBe(true));