首页 > 解决方案 > 在遍历父母时检查与子元素相关的条件 - 量角器

问题描述

我有一个 HTML 片段如下:

...
<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机制。考虑到ElementFinderAPI,我应该但大多数示例都没有使用它。

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

我会很感激任何帮助。提前致谢。

标签: javascriptangularprotractorjhipsterangular-e2e

解决方案


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

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

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

第二个可能的问题,点击后可能需要等待。否则getCurrentUrl可能会返回原始 url,因为它还没有加载新页面。在这种情况下,我可以建议您等待该网址

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

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


推荐阅读