如何断言元素是集中的?

时间:2014-03-31 04:10:18

标签: angularjs selenium jasmine protractor

我正在尝试验证焦点元素是否在页面加载时设置为我的测试之一。

这似乎有效,我可以使用元素资源管理器进行验证,但是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()查询它,所以我认为这个测试应该通过,但它不是。

相反,我得到了一个巨大的堆栈跟踪,它没有提供任何有用的信息。

3 个答案:

答案 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));