量角器 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;
}
}
干杯!
我已将 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;
}
}
干杯!