量角器e2e |点错误时元素无法单击| Angular Hybrid应用

时间:2018-07-12 16:14:56

标签: angularjs protractor angular6

我已经将Angular JS应用迁移到Hybrid应用。我正在使用Angular6 / AngularJS(1.6)混合应用程序。我正在尝试为角度js页面运行现有e2e测试的量角器e2e。所有测试用例均因以下原因而失败。

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

1 个答案:

答案 0 :(得分:1)

因此,您可以做的一件事是点击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;
      }
    }

干杯!