编程语言
首页 > 编程语言> > javascript – 断言元素是重点

javascript – 断言元素是重点

作者:互联网

根据How do I assert an element is focused?线程,您可以通过切换到activeElement()来检查元素是否已被聚焦,并断言这与您期望获得焦点的元素相同:

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

在我的例子中,当前关注的元素没有id属性.

我应该怎么做而不是检查身份证?

额外的问题:另外,正如你从我试图解决它看到的那样,看起来我不能指望/断言一个元素(或web元素)作为一个完整的对象.为什么?

我试过了:

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

但是失败的是我甚至无法理解的错误 – 有一个巨大的追溯(在控制台中滚动约10分钟),但内部没有用户友好的错误.

我也试过使用getWebElement():

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

但是这导致了以下错误:

Error: expect called with WebElement argument, expected a Promise. Did
you mean to use .getText()?

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

解决方法:

在我的回答中,我将假设activeElem和pageElem都是量角器元素查找器,并指向相同的web元素.

首先回答你关于原因的问题

expect(activeElem).toEqual(pageElem);

进入一个无限循环,这是因为量角器修补了jasmine的期望在断言之前解决了promise,所以像expect一样(activeElem.getText()).toEqual(‘text’);无需工作

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

你可以说,为什么不一次解决这个承诺呢?但后来有嵌套的承诺.

所以现在您可能会认为这是一个问题,但实际上并不是因为您永远不会在实际用例中比较两个elementFinder. Jasmine的toEqual执行引用检查,而不是深度比较,所以期望(activeElem).toEqual(pageElem),与简单的引用比较相同:(activeElem === pageElem).toToTruthy(),并且确实没有这样做. (注意元素(by.css(‘html’))=== element(by.css(‘html’))是false,因为它不是相同的引用.)

那么,回答这个线程的真正问题:如何看看两个elementFinder是否具有相同的底层元素:

expect(activeElem.getId()).toEqual(pageElem.getId());

标签:javascript,angularjs,testing,protractor,end-to-end
来源: https://codeday.me/bug/20191001/1837605.html