一尘不染

主张一个要素是集中的

angularjs

根据我如何断言一个元素是集中的?线程,您可以通过切换activeElement()到来检查元素是否聚焦,并断言这与您期望获得焦点的元素相同:

expect(page.element.getAttribute('id')).toEqual(browser.driver.switchTo().activeElement().getAttribute('id'));

就我而言,当前关注的 元素没有idattribute

我应该怎么做而不要检查id

额外的问题:另外,从我的解决方案尝试中可以看出,我似乎无法期望/断言一个元素(或Web元素)作为一个完整的对象。为什么?


我试过了:

expect(page.element).toEqual(browser.driver.switchTo().activeElement());

但是失败并出现一个我什至无法理解的错误-存在巨大的回溯(在控制台中滚动大约需要10分钟),但是里面没有用户友好的错误。

我也尝试使用getWebElement()

expect(page.element.getWebElement()).toEqual(browser.driver.switchTo().activeElement());

但这导致以下错误:

错误:期望通过WebElement参数调用,期望为Promise。您是要使用.getText()吗?

使用最新的量角器开发版本。


阅读 231

收藏
2020-07-04

共1个答案

一尘不染

在我的答案我要去承担activeElem,并pageElem都量角器元素发现者,并都指向同一个网页元素。

首先回答你关于为什么的问题

expect(activeElem).toEqual(pageElem);

陷入无限循环,这是因为量角器expect在声明之前修补了茉莉花以解决诺言,因此诸如此类的事情expect(activeElem.getText()).toEqual('text');无需做

activeElem.getText().then(function(text) {
  expect(text).toEqual('text');
})

您可能会说,为什么不只解决一次诺言呢?但是,这里有嵌套的承诺。

因此,现在您可能会认为这是一个问题,但实际上不是因为您永远不会在实际用例中比较两个elementFinders。Jasmine的toEqual进行引用检查,而不进行深度比较,因此expect(activeElem).toEqual(pageElem),与简单的引用比较相同:(activeElem===pageElem).toToTruthy(),这样做真的没有意义。(注意element(by.css('html')) ===element(by.css('html'))是错误的,因为它不是相同的参考。)

因此,要回答此线程的真正问题:如何查看两个elementFinders是否具有相同的基础网络元素:

expect(activeElem.getId()).toEqual(pageElem.getId());
2020-07-04