【发布时间】:2015-02-23 17:12:48
【问题描述】:
根据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());
但这导致了以下错误:
错误:期望使用 WebElement 参数调用,期望一个 Promise。做过 你的意思是使用 .getText()?
使用最新的量角器开发版本。
【问题讨论】:
-
你的
page.element是什么,你在哪里分配的? -
@BettySt 我不想谈论一个实际的元素,而是将其视为一个抽象,假设没有可依赖的属性..但如果你问它是
<input name="username">元素,我可以,严格来说由name属性标识..但我想避免这种情况.. -
嗯我真的不明白你为什么不指定元素.. 有某种用户操作比这个元素应该被关注?当您描述一个用例时,也许对我们来说更容易......?
-
@BettySt 我只是在页面完成加载时检查元素是否处于焦点。正如您所建议的,我可以检查其中一个属性或文本,而不是
id,但我想留在元素级别并断言元素或 web 元素 - 这变得非常特定于量角器。希望你明白我的意思。我认为我们已经非常接近用 glepretre 解决它了。感谢您的参与!
标签: javascript angularjs testing protractor end-to-end