【发布时间】:2018-01-06 01:38:09
【问题描述】:
我有一个 Angular 5.x 项目。我正在尝试使用 Protractor 执行一些 e2e 测试。我运行了一些简单的测试,这些测试只是检查浏览器标题并检查基本元素的存在。
我现在正尝试在与页面交互的地方进行更复杂的测试。不幸的是,单击一个元素会导致令人讨厌的挂起,并且永远不会回来(即使在 30-60 秒后也不会)。有什么想法可能导致这种情况,或者我什至可以如何排除故障?
有效的测试:
it('should have correct title', () => {
expect(browser.getTitle()).toEqual("My App");
});
it('should have a login button', () => {
let loginButton = element(by.id('btnLogin'));
var untilLoginIsVisible = ExpectedConditions.presenceOf(loginButton);
browser.wait(untilLoginIsVisible, 20000);
expect(loginButton.isDisplayed()).toEqual(true);
});
挂起的测试 - 注意与上述成功测试的相似性
it('show login transition', () => {
let loginButton = element(by.id('btnLogin'));
var untilLoginIsVisible = ExpectedConditions.presenceOf(loginButton);
browser.wait(untilLoginIsVisible, 20000);
//EITHER ONE OF THESE FAILS, AND JUST HANGS FOREVER
loginButton.click().then(() => { console.log("Clicked, yo!"); });
browser.actions().mouseMove(loginButton).mouseDown(loginButton).mouseUp().perform();
});
其他信息:
- 我尝试了页面上的其他按钮 - 结果相同
- 虽然我没有收到任何错误,但在大约 60 秒后,我确实在输出中收到了
F,表示测试失败,但它永远不会移动到下一个测试 - 大约 2 分钟后,它开始吐出
ERROR:process_metrics.cc(105)] NOT IMPLEMENTED,我认为这不是问题的根源(类似的无关投诉 here)
【问题讨论】:
-
如果您在
browser.wait(untilLoginIsVisible, 20000);之后放置一个browser.sleep(30000),然后在打开的浏览器中手动单击登录按钮,会发生什么情况?您看到想要的结果了吗?换句话说,我正在尝试查看应用程序或应用程序构建本身是否有任何问题..谢谢。 -
仅供参考,
ERROR:process_metrics.cc(105)] NOT IMPLEMENTED是Chrome 63 issue。不应该与你在这里拥有的东西有关。 -
单击元素时会运行什么代码?在运行的代码开始处在源代码中放置一个断点,然后单步执行代码,直到您(希望)找到问题。即使您不拥有该网站,也可以在 Chrome 中完成所有这些操作。
-
你试过
ExpectedConditions.elementToBeClickable()吗? -
@alecxe - 如果我删除量角器点击并手动执行此操作,应用程序会响应并且测试通过。添加量角器点击后永远挂起。 @HaC - 我调整为
elementToBeClickable(),结果相同。该元素是可点击的,因此它会飞过它。然后点击永远挂起。
标签: javascript angular selenium protractor