量角器 e2e |点错误时元素不可点击 | Angular 混合应用

Protractor e2e | Element not clickable at point error | Angular Hybrid app

我已将 Angular JS 应用程序迁移到混合应用程序。我正在使用 Angular6/AngularJS (1.6) 混合应用程序。我正在尝试 运行 现有 e2e 测试的量角器 e2e angular js 页面。由于以下原因,所有测试用例都失败了。

button is not clickable at point (386, 20)

I am using Angular-Cli project. If I am trying to run this test individually they are passing. They fail when I am running in multiple tests together in a suite.

My protractor version : protractor": "^5.3.2
"webdriver-manager": "12.0.6",
"selenium-webdriver": "4.0.0-alpha.1",

I also tried with different version of protractor and selenium, but still got the same problem. I also tried applying the fixes below. That is also not working.
1)
var elem = element(by.id('yourId'));
browser.actions().mouseMove(elem).click();
2)
browser.waitForAngularEnabled(false);

Failed: unknown error: Element ... is not clickable at point (386, 20). Other element would receive the click: ...
(Session info: chrome=67.0.3396.99)
(Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.15063 x86_64)
at Object.checkLegacyResponse (\node_modules\selenium-webdriver\lib\error.js:546:15)
at parseHttpResponse (\node_modules\selenium-webdriver\lib\http.js:509:13)
at doSend.then.response (\node_modules\selenium-webdriver\lib\http.js:441:30)

Node Version: `8.11.3
Protractor Version: 5.3.2
Angular Version: 6.0.4
AngularJS Version: 1.6.4
Browser(s): Chrome, firefix
Operating System and Version Windows 10
Your protractor configuration file
A relevant example test
Output from running the test
Steps to reproduce the bug
The URL you are running your tests against (if relevant)
Thanks,
Abhishek

所以您可以做的一件事就是点击 javascript。这可以使用以下函数来实现:

async function sendClick(element: ElementFinder): Promise<boolean> {
  try { 
    await browser.executeScript('arguments[0].click();', await element.getWebElement());
    return true;
  }
  catch (err) {
    return false;
  }
}

备注

当通过 javascript 单击时,click 事件直接发送到元素,并没有真正模拟用户单击它。因此,如果该元素出现在页面上但不可见,例如,它仍会收到点击!

当使用 element.click() 时,元素会滚动到视图中,并且只有在可以用鼠标单击时才会单击该元素。所以当使用我提供的技术时,不会发现像这样的错误。

要获得可靠的点击功能,您必须自己添加适当的检查。可能如下所示:

async function sendClick(element: ElementFinder): Promise<boolean> {
      try { 
        if(!await element.isDisplayed()) {
          return false;
        }
        await browser.executeScript('arguments[0].click();', await element.getWebElement());
        return true;
      }
      catch (err) {
        return false;
      }
    }

干杯!