4

I am trying to test my GUI with Nightwatch. I can not seem to find how to simulate a right click. I went through the API Reference page(http://nightwatchjs.org/api) and searched everywhere. Am I missing something here? Because I believe that right clicking should be one of the most basic functionalities.

lamyarus
  • 166
  • 2
  • 11

3 Answers3

6

Good news !!!

Since Nightwatch.js v0.6.13, you can fire a real right click :-)

"Right Click to Show ContextMenu" : function (browser) {
  browser
   .moveToElement('#targetElement')
   .mouseButtonClick('right')
   .pause(5000)
   .end();
}
Nicolas Pennec
  • 7,533
  • 29
  • 43
1

EDIT: This DOESN'T WORK. I am going to leave it here anyways. It might be helpful somehow.

I found a work around. mousebuttonDown() method allows the use of left, middle and right clicks. They are assigned 0,1 and 2 respectively. So the following somehow simulates a rightclick:


"Right Click to Show ContextMenu" : function (browser) {
    browser
       .moveToElement(/*locate your element here*/)
       .mouseButtonDown(2)
       .mouseButtonUp(2)
       .end();
}
lamyarus
  • 166
  • 2
  • 11
  • I opened a [pull request](https://github.com/beatfactor/nightwatch/pull/425) on github project to fix this issue with the addition of a new function : mouseButtonClick(2) – Nicolas Pennec Apr 21 '15 at 05:49
  • My pull request is accepted and merged ! I just posted a new answer. Test it ;) – Nicolas Pennec May 29 '15 at 09:37
1

I have the same issue with selenium-webdriver ...

But right now i'm using that workaround for Nightwatch.js:

"Right Click to Show ContextMenu" : function (browser) {
     // inject script in client
     browser.execute(function(selector){
         // dispatch "context menu" event 
         $(selector).trigger('contextmenu');
         return true;
    }, ['#menu'])
    .pause(5000)
    .end();
}

(cf. Nightwatch API)

Or in pure JS :
document.querySelector('.logo').dispatchEvent(new CustomEvent('contextmenu'));

(cf. Trigger right click using pure Javascript)

And check your target webpage :

   $('#menu').on('contextmenu', function () {
      alert('context menu');
      //return false;     // cancel default menu
   });
Community
  • 1
  • 1
Nicolas Pennec
  • 7,533
  • 29
  • 43