Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Protractor + chrome driver: Element is not clickable at point

Hi I am having some trouble getting a basic protractor test to work.

My setup:

  • I use requirejs so I init angular using angular.bootstrap(), not the ng-app attr. According to protractor docs this is not supported out of the box, but seems to work fine for tests that don' involve clicking.
  • Protractor conf.json:

    "use strict"; exports.config = {     specs: '../E2ETests/**/*.js',     chromeOnly: true,     getPageTimeout: 30000,     allScriptsTimeout: 30000 } 
  • I use some third party jquery plugs which I wrap in directives, I suspect these might be part of the issue.

The test:

"use strict"; describe('When clicking should add stuff', function () {     var ptor;     beforeEach(function () {         browser.get('https://localhost/myApp');         ptor = protractor.getInstance();     });     it('add stuff', function () {         // If I comment this, the test pass.          element(by.id('add-stuff-button')).click();         // This does not matter fails on the line above..         expect(browser.getTitle()).toBeDefined();     }); }); 

The error:

UnknownError: unknown error: Element is not clickable at point (720, 881). Other element would         receive the click: <div class="col-md-5 col-md-offset-5">...</div> (Session info: chrome=37.0.2062.124) (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64) 

Thoughts

The chromedriver do find the button, because if I change the id it complains that no element is found. So I think the problem is that the button moves from its initial position. As the element(***) function should wait for angular to be done, I suspect that its the third party plugins that might interfere as they might not use angular api's fetching data etc. So angular think its done but then the third party plug populates and moves stuff around.

Any ideas what to do? If the third party plugs is the problem, can I somehow tell angular that third party stuff is going on and then later tell it when its done?

Thx Br Twd

like image 600
twDuke Avatar asked Oct 06 '14 07:10

twDuke


People also ask

Why are elements not clickable?

The exception “Element is not clickable at point” might be thrown when the element is not under focus or the action is being performed on the incorrect WebElement. In such cases, you have to switch to the actual element and perform the click action.

Is not clickable at point because another element obscures it selenium?

We can get the error - Element is not clickable at point while trying to click a link in Selenium webdriver. This is common in chromedriver as the Chrome browser determines an element with point location. When the position of an element is changing and we make an attempt to click on it, this error is encountered.

Is not clickable at point XY other element would receive the click?

WebDriverException - Element is not clickable at point (xx, xx). Other element would receive the click'. This happens when the element is loaded into the DOM, but the position is not fixed on the UI. There can be some other divs or images or ads that are not loaded completely.

Is not clickable at point other element would receive the click robot framework?

What Is the “Element Is Not Clickable at Point” Error? The error “element is not clickable at point” is self-explanatory. It means that the element that you're trying to click on can't be clicked at that particular point. You'd usually find this error when you locate an element and try to execute a click action on it.


2 Answers

You should set window size in your config file

onPrepare: function() {   browser.manage().window().setSize(1600, 1000); } 
like image 191
Gal Margalit Avatar answered Sep 20 '22 12:09

Gal Margalit


Following worked fine for me:

browser.actions().mouseMove(element).click(); 

Edit: If above does not work try chaining perform() method too(I got this as an edit suggestion, I have not tested it but somebody could verify it and comment)

browser.actions().mouseMove(element).click().perform(); 
like image 21
Aman Gupta Avatar answered Sep 21 '22 12:09

Aman Gupta