角度e2e测试:如何检查元素是否得到焦点?

时间:2013-07-17 07:44:11

标签: angularjs focus karma-runner

我有一个angular.js应用程序应该在执行某些操作时将焦点设置为特定元素(即,将焦点设置为无效的表单字段以让用户更正错误)。

我正试图在angular-e2e测试中测试这种行为:

it('should set the focus to the invalid field', function() {
  input('email').enter('foo'); // this is not a valid email address
  element(/* submit button */).click(); // try to submit the form

  // How do I do this?
  expect(element(/* email input element */)).toHaveTheFocus();
});

我怎么能指望某个元素(不)有焦点?我已经尝试了':focus'选择器

expect(element('input[id="..."]:focus').count()).toBe(1);

但没有成功(受Testing whether certain elements are visible or not启发)。

要设置焦点,我使用How to set focus on input field?

的想法

我也在为此编写单元测试,最后在DOM focus()函数上使用了一个间谍(据我所知,这对于e2e测试来说是不可能/不可取的。)

1 个答案:

答案 0 :(得分:0)

我在这里看到两个选项。第一个,我真正推荐的,特别是在E2E测试中,是使用Jasmine-jQuery提供toBeFocused匹配器来处理这个问题。

如果您不想包含Jasmine-jQuery,因为它太大或者您不喜欢它,那么您有两个选择:

  • 将按钮与文档的有效元素进行比较,可以使用以下代码访问它:document.activeElement
  • 将按钮与文档的活动元素进行比较,方法是从元素本身(这是jasmine-jquery的方式)中获取它:DOMELEMENT.ownerDocument.activeElement