【问题标题】:Test ng-click handler on anchor tag在锚标记上测试 ng-click 处理程序
【发布时间】:2016-06-02 11:23:05
【问题描述】:

我有一个链接到外部站点的常规(非 JS)锚标记,但在单击时执行的其他行为会更改 DOM

<body ng-controller="MyController">
  <a href="https://www.google.co.uk/" ng-click="inProgress = true">
    {{ inProgress ? "Going to Google" : "Go to Google" }}
  </a>
</body>

我想在 E2E 量角器测试中测试这种行为。但是,看起来一旦单击链接,后续命令就会在外部页面的上下文中运行。例如,以下测试通过:

browser.element(by.css('a')).click();
expect(browser.getCurrentUrl()).toBe('https://www.google.co.uk/');

但以下测试失败

browser.element(by.css('a')).click();
expect(browser.element(by.css('body')).getText()).toBe('Going to Google');

用失败显示谷歌主页的内容为body的文字。

如何测试点击非 JavaScript a 标记后会发生什么?

【问题讨论】:

  • 如果你想让你的链接在不同的窗口打开,则添加_blank目标,否则测试正确失败,点击链接时你的html消失
  • @floribon 目前,我不希望链接在新窗口中打开,但我确实想测试用户在单击链接后是否看到链接中的文本更改。
  • 你可以使用 JQuery triggerHandler 来测试这个场景。 browser.element('a').triggerHandler('click')
  • @RameshkumarArumugam 听起来很有潜力。添加作为答案? (但是,我正在测试的应用程序不包含 jQuery)

标签: javascript html angularjs protractor


【解决方案1】:

我想您需要在点击发生后等待文本更改。从您的代码中,您正在寻找点击后的文本立即?你试过Expected Conditions

var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElement($('body'), 'Going to Google'), 5000);

【讨论】:

  • 预期条件没有帮助。在点击显示外部页面已加载后立即进行测试,因此等待更长的时间不会让时间倒流并让量角器访问上一页此时的内容。
  • 对不起,我误会了。我以为你在测试后续页面的正文内容
  • 再读一遍问题,感觉EC还是有潜力的,虽然不是很看好。您正在立即测试正文,但也许您需要等待几分之一秒并给量角器一个机会?
  • 我仍然不确定这会有什么帮助...有机会做什么?
  • 冒着明显的风险,WebDriverJS(量角器在内部使用它)在每个轮询持续时间(我认为默认为 500 毫秒)轮询 EC。在上面的示例中,最终超时为 5 秒,每次轮询持续时间为 500 毫秒。 5s 后量角器会抛出超时异常。我说的可能是在 500ms 的投票期间,量角器可能有机会看到正文翻转
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多