量角器挂在元素上点击

时间:2018-01-04 23:17:43

标签: javascript angular selenium protractor

我有一个有角度的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

1 个答案:

答案 0 :(得分:0)

我终于找到了原因。我使用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() ...