Angularjs 如何断言一个元素是聚焦的?
我试图验证聚焦元素是否作为我的测试之一设置在页面加载上 这似乎是可行的,我可以用元素浏览器进行验证,但Jasmine matchers似乎没有意识到这一点 这是我的密码: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'));
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));