【问题标题】:Check condition related to child element while traversing parents - Protractor在遍历父母时检查与子元素相关的条件 - 量角器
【发布时间】:2020-09-01 20:50:54
【问题描述】:

我有一个 HTML sn-p 如下:

...
<div class="show-div account">
  <ul >
    <li>
      <a href="/account/login">Login</a>
    </li>
    <li>
      <a href="/account/register">Register</a>
    </li>
  </ul>
</div>
...

我想检查单击登录按钮后是否单击了登录页面。我从文档中了解到,以下内容应该有效,但不会。

    const loginAction = await accountIcon.element(by.className('show-div')).$('ul').$$('li').filter(async function(elem) {
      const a = elem.element(by.css('a'));
      const attr = await a.getAttribute('href');
      return attr.includes('/account/login');
    }).first().$('a');
    await loginAction.click();
    const url = await browser.getCurrentUrl();
    expect(url).endsWith('/account/login');

我在 Angular 10 中使用“量角器”:“7.0.0”。这些是由 JHipster 框架自动生成的。我不确定是否需要使用async/await 机制。考虑到ElementFinder API,我应该但大多数示例都没有使用它。

(顺便说一句,SELENIUM_PROMISE_MANAGER 已禁用)

如果有任何帮助,我将不胜感激。提前致谢。

【问题讨论】:

  • href有静态值href="/account/login"吗?有什么变化吗?
  • 它是静态的,不会改变

标签: javascript angular protractor jhipster angular-e2e


【解决方案1】:

您的第一个问题可能是您的定位器。过滤不行,那么chaining可能有问题,element...element.all...first().element()

如果 url 是静态的,您可以将其用作定位器,并避免所有这些

let elem = $('[href="/account/login"]')

第二个可能的问题,点击后可能需要等待。否则getCurrentUrl 可能会返回原始 url,因为它还没有加载新页面。在这种情况下我可以推荐你wait for that url

var EC = protractor.ExpectedConditions;
// Waits for the URL to contain 'foo'.
await browser.wait(EC.urlContains('/account/login'), 15000);

在这部分脚本中,如果 url 从不存在,它将失败并出现显式错误,表示该 url 不存在。否则,您不需要断言 url。如果脚本通过了,这可能会作为您的 url 存在的警告,无需断言它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多