Voici un mini article pour vous montrer comment faire un click droit dans Selenium webdriver. Contrairement au click « standard », cette action n’est pas prévue de base. Si vous avez affaire à une interface web avec de faux menus contextuels, il faut bien trouver un moyen pour passer outre les limitations du driver!
Heureusement, le javascript permet de simuler le click droit et double-heureusement, Webdriver nous permet d’exécuter du javascript.
Voici une méthode pour « cliquer droit » sur un élément via un sélecteur CSS. Dans l’exemple, jQuery est utilisé pour sélectionner l’élément, mais libre à vous d’utiliser du « pur javascript » s’il n’est pas disponible sur votre site.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
//Création d'une classe custom qui pourra contenir d'autres méthodes utiles class MySelenium2Extended extend \PHPUnit_Extensions_Selenium2TestCase{ public function rightClick($cssSelector) { $javascript = ' return (function($,cssSelector){ var $element = $(cssSelector); var element = $element.get(0); //On prend le premier élément var evt = element.ownerDocument.createEvent("MouseEvents"); var RIGHT_CLICK = 2; var elementPosition = $element.position(); evt.initMouseEvent( "contextmenu" ,true ,true , window ,1 ,500 // event s screen x coordinate ,500 // event s screen y coordinate ,elementPosition.left // event s client x coordinate ,elementPosition.top // event s client y coordinate ,false ,false ,false ,false ,RIGHT_CLICK ,null ); if (document.createEventObject){ //Pour IE return element.fireEvent("onclick", evt) } else{ //Pour les autres return !element.dispatchEvent(evt); } })(jQuery,\''.$cssSelector.'\');'; $this->execute(array('script' => $javascript, 'args' => array())); } } |
Il ne vous reste plus qu’à étendre la nouvelle classe MySelenium2Extended plutôt que PHPUnit_Extensions_Selenium2TestCase pour avoir accès à la méthode.
Voici un exemple de code à l’usage:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class InterfaceTest extend MySelenium2Extended{ public function testContextMenu() { //Ouvre le menu contextuel lié à l'icone "manage" dans la toolbar $this->rightClick('#toolbar .manage'); //Click sur le lien dans le menu contextuel $this->click($this->byClassName('add_page')); //Etc...Le formulaire s'affiche et on peut donc travailler dessus } } |
Bons tests!