【问题标题】:protractor hanging on element click量角器挂在元素点击
【发布时间】: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 IMPLEMENTEDChrome 63 issue。不应该与你在这里拥有的东西有关。
  • 单击元素时会运行什么代码?在运行的代码开始处在源代码中放置一个断点,然后单步执行代码,直到您(希望)找到问题。即使您不拥有该网站,也可以在 Chrome 中完成所有这些操作。
  • 你试过ExpectedConditions.elementToBeClickable()吗?
  • @alecxe - 如果我删除量角器点击并手动执行此操作,应用程序会响应并且测试通过。添加量角器点击后永远挂起。 @HaC - 我调整为elementToBeClickable(),结果相同。该元素是可点击的,因此它会飞过它。然后点击永远挂起。

标签: javascript angular selenium protractor


【解决方案1】:

我终于找到了原因。我正在使用multiCapabilities 来测试各种浏览器和尺寸。不幸的是,我的第一个能力是使用移动仿真:

   chromeOptions: {
     'mobileEmulation': {
       'deviceName': 'iPhone 4'
     },

这是使点击完全挂起的触发器。以下是有关哪些有效和哪些无效的更多信息。

在非移动仿真上工作,在移动仿真上挂起

loginButton.click().then(() => { console.log("Clicked, yo!"); });

适用于移动仿真

browser.touchActions().tap(loginButton).perform().then(() => { console.log("Tapped, yo!"); });

不幸的是,无论是什么原因导致量角器完全挂起并且没有给出任何错误。转移到下一个功能会使这一点更加明显。我需要处理的后续问题是,是否所有移动仿真测试都需要使用 tap() 代替 click()...

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
相关资源
最近更新 更多