遍历父元素时检查与子元素相关的条件 - Protractor
Check condition related to child element while traversing parents - Protractor
我有一个 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');
我正在使用 "protractor": "7.0.0" 和 Angular 10。这些是由 JHipster 框架自动生成的。我不确定是否需要使用 async/await
机制。考虑到 ElementFinder
API,我应该,但大多数示例都没有使用它。
(顺便说一句,SELENIUM_PROMISE_MANAGER 已禁用)
如有任何帮助,我将不胜感激。提前致谢。
您的第一个问题可能是您的定位器。过滤不了,那么链接可能有问题,element...element.all...first().element()
如果 url 是静态的,您可以将其用作定位器,并避免这一切
let elem = $('[href="/account/login"]')
第二种可能的问题,点击后可能需要等待。否则 getCurrentUrl
可能 return 原来的 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 存在的保证,无需断言
我有一个 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');
我正在使用 "protractor": "7.0.0" 和 Angular 10。这些是由 JHipster 框架自动生成的。我不确定是否需要使用 async/await
机制。考虑到 ElementFinder
API,我应该,但大多数示例都没有使用它。
(顺便说一句,SELENIUM_PROMISE_MANAGER 已禁用)
如有任何帮助,我将不胜感激。提前致谢。
您的第一个问题可能是您的定位器。过滤不了,那么链接可能有问题,element...element.all...first().element()
如果 url 是静态的,您可以将其用作定位器,并避免这一切
let elem = $('[href="/account/login"]')
第二种可能的问题,点击后可能需要等待。否则 getCurrentUrl
可能 return 原来的 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 存在的保证,无需断言