gpt4 book ai didi

javascript - 断言一个元素是有焦点的

转载 作者:可可西里 更新时间:2023-11-01 02:36:19 26 4
gpt4 key购买 nike

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

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

在我的例子中,当前获得焦点的元素没有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()?

使用最新的 Protractor 开发版本。

最佳答案

在我的回答中,我将假设 activeElempageElem 都是 Protractor 元素查找器,并且指向同一个 Web 元素。

先回答你为什么的问题

expect(activeElem).toEqual(pageElem);

进入无限循环,这是因为 Protractor 修补了 jasmine 的 expect 以在断言之前解决 promise,所以像 expect(activeElem.getText()).toEqual('text' ); 无需执行

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

你可能会说,为什么不只 resolve 一次 promise?但是还有嵌套的 promise 。

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

因此,要回答这个线程的真正问题:如何查看两个 elementFinder 是否具有相同的底层 webelements:

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

关于javascript - 断言一个元素是有焦点的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28679364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com