【问题标题】:How do I assert an element is focused?我如何断言一个元素是有焦点的?
【发布时间】:2023-04-02 17:43:01
【问题描述】:

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

这似乎有效,我可以使用元素浏览器进行验证,但 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() 进行查询,所以我认为这个测试应该通过,但事实并非如此。

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

【问题讨论】:

  • expect(browser.driver.switchTo().activeElement()).toBe(loginPage.usernameInput) 会发生什么?
  • @ivarni - 我得到 Error: expect called with WebElement argment, expected a Promise. Did you mean to use .getText()? 而不是大堆栈跟踪。
  • 好的,我在想问题可能是.switchTo().activeElement() 有某种异步副作用,并且直到评估期望之后焦点才真正改变,但事实并非如此那么情况。

标签: angularjs selenium jasmine protractor


【解决方案1】:

我想我找到了解决方法:

由于expect 期望通过承诺调用,您可以比较两个webElement 的某些属性(您的输入和当前的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'));
});

【讨论】:

  • 谢谢 - 我想我可以做这样的事情,只是希望有一种方法可以在不依赖属性的情况下测试元素相等性。我想这可以做同样的工作,但它也依赖于我设置了一个独特的属性。
  • 我想我可以做 .getInnerHtml().getOuterHtml() 来达到同样的效果。
  • 我明白,这就是为什么我说这只是一种解决方法;)。是的,如果您愿意,您也可以比较内部或外部 HTML
  • 嘿@glepretre,如果您有时间,请在此处查看您的解决方案的后续行动:stackoverflow.com/questions/28679364/…。谢谢!
【解决方案2】:

我最终使用了这个不错的简单函数来断言焦点。

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

【讨论】:

  • 这不是输入元素的解决方案:它每次都是空的
【解决方案3】:

我设法找到了一种方法来比较一个元素与焦点元素,而无需传递任何属性:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多