ale*_*cxe 10 javascript testing end-to-end angularjs protractor
根据我如何断言元素是集中的?线程,您可以通过切换到a来检查元素是否被聚焦activeElement()
并断言这与您期望获得焦点的元素相同:
expect(page.element.getAttribute('id')).toEqual(browser.driver.switchTo().activeElement().getAttribute('id'));
Run Code Online (Sandbox Code Playgroud)
在我的例子中,当前关注的元素没有id
属性.
我应该怎么做而不是检查id
?
额外的问题:另外,正如你从我试图解决它看到的那样,看起来我不能指望/断言一个元素(或web元素)作为一个完整的对象.为什么?
我试过了:
expect(page.element).toEqual(browser.driver.switchTo().activeElement());
Run Code Online (Sandbox Code Playgroud)
但是失败的是我甚至无法理解的错误 - 有一个巨大的追溯(在控制台中滚动约10分钟),但内部没有用户友好的错误.
我也试过用getWebElement()
:
expect(page.element.getWebElement()).toEqual(browser.driver.switchTo().activeElement());
Run Code Online (Sandbox Code Playgroud)
但是这导致了以下错误:
错误:期望使用WebElement参数调用,期望是Promise.你的意思是使用.getText()吗?
使用最新的量角器开发版本.
在我的回答中,我将假设activeElem
并且pageElem
都是量角器元素查找器,并且指向相同的web元素.
首先回答你关于原因的问题
expect(activeElem).toEqual(pageElem);
Run Code Online (Sandbox Code Playgroud)
进入一个无限循环,这是因为量角器修补了jasmine expect
来解决断言之前的承诺,所以像expect(activeElem.getText()).toEqual('text');
工作一样无需做
activeElem.getText().then(function(text) {
expect(text).toEqual('text');
})
Run Code Online (Sandbox Code Playgroud)
你可以说,为什么不一次解决这个承诺呢?但后来有嵌套的承诺.
所以现在您可能会认为这是一个问题,但实际上并不是因为您永远不会在实际用例中比较两个elementFinder.Jasmine的toEqual执行引用检查,而不是深度比较,因此expect(activeElem).toEqual(pageElem)
,与简单的引用比较相同:(activeElem === pageElem).toToTruthy()
并且实际上没有必要这样做.(注意element(by.css('html')) === element(by.css('html'))
是错误的,因为它不是相同的引用.)
那么,回答这个线程的真正问题:如何看看两个elementFinder是否具有相同的底层元素:
expect(activeElem.getId()).toEqual(pageElem.getId());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4140 次 |
最近记录: |