根据我如何断言一个元素是集中的?线程,您可以通过切换activeElement()到来检查元素是否聚焦,并断言这与您期望获得焦点的元素相同:
activeElement()
expect(page.element.getAttribute('id')).toEqual(browser.driver.switchTo().activeElement().getAttribute('id'));
就我而言,当前关注的 元素没有idattribute。
id
我应该怎么做而不要检查id?
额外的问题:另外,从我的解决方案尝试中可以看出,我似乎无法期望/断言一个元素(或Web元素)作为一个完整的对象。为什么?
我试过了:
expect(page.element).toEqual(browser.driver.switchTo().activeElement());
但是失败并出现一个我什至无法理解的错误-存在巨大的回溯(在控制台中滚动大约需要10分钟),但是里面没有用户友好的错误。
我也尝试使用getWebElement():
getWebElement()
expect(page.element.getWebElement()).toEqual(browser.driver.switchTo().activeElement());
但这导致以下错误:
错误:期望通过WebElement参数调用,期望为Promise。您是要使用.getText()吗?
使用最新的量角器开发版本。
在我的答案我要去承担activeElem,并pageElem都量角器元素发现者,并都指向同一个网页元素。
activeElem
pageElem
首先回答你关于为什么的问题
expect(activeElem).toEqual(pageElem);
陷入无限循环,这是因为量角器expect在声明之前修补了茉莉花以解决诺言,因此诸如此类的事情expect(activeElem.getText()).toEqual('text');无需做
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'))是错误的,因为它不是相同的参考。)
expect(activeElem).toEqual(pageElem)
(activeElem===pageElem).toToTruthy()
element(by.css('html')) ===element(by.css('html'))
因此,要回答此线程的真正问题:如何查看两个elementFinders是否具有相同的基础网络元素:
expect(activeElem.getId()).toEqual(pageElem.getId());