2017-05-22 1 views
0

J'utilise des tests internes avec Selenium pour automatiser les tests fonctionnels (link).déplacer la souris pour positionner avec geckodriver

Et nous devons être capables de fonctionner sur plusieurs navigateurs. Nous avons donc mis l'emphase sur Chrome, mais aussi nous avons pu exécuter les tests contre IE et Firefox, mais après geckodriver a été libéré et nous sommes passés à elle, la plupart des tests qui sont sous-entendant des événements de souris ne parviennent pas, par exemple quand je vous appelle moveMouseTo() je reçois l'exception suivante:

Executing: [mousemove: 7 false]) 
WARN - Exception thrown 
org.openqa.selenium.UnsupportedCommandException: mouseMoveTo 

J'ai trouvé une question similaire au sujet planant sur un élément et je réussi à le faire fonctionner avec stagiaire en exécutant le code de moveMouseTo fonctionne comme si nous avions brisé les événements de la souris, donc je viens de commenter que si elle est liée à brokenMouseEvents

//if (this.capabilities.brokenMouseEvents) { 
    if(element){ 
     return element.getPosition().then(function(position){ 
      return self.execute(simulateMouse, [ { 
         action: 'mousemove', 
         position: position, 
         element: element, 
         xOffset: xOffset, 
         yOffset: yOffset 
        } ]).then(function (newPosition) { 
         self._lastMousePosition = newPosition; 
        }); 
       }) 
    } else{ 
      return self.execute(simulateMouse, [ { 
       action: 'mousemove', 
       position: self._lastMousePosition, 
       element: element, 
       xOffset: xOffset, 
       yOffset: yOffset 
      } ]).then(function (newPosition) { 
       self._lastMousePosition = newPosition; 
      }); 
     } 
//} 

Mais faire cela brise le défilement, car moveMouseTo() peut également être utilisé pour faire défiler un élément et aussi nous ne pouvons pas l'utiliser puisque la fonction moveMouseTo() est définie dans les modules de noeuds, et il échouera quand nous essayons de courir les essais au Jenkins. Une autre idée, je pense qu'il sera de construire une fonction wrapper pour traiter le cas lorsque nous sommes en cours d'exécution contre Firefox, et dans ce cas, nous devrions exécuter un autre code, et pour les autres navigateurs, nous pouvons appeler moveMouseTo(), mais dans Dans ce cas je ne sais pas comment résoudre les problèmes de défilement.

Quelqu'un a-t-il une idée?

Merci!

Répondre

0

Je pense passer à un élément que vous pouvez utiliser Actions classe

Actions ac= new Actions(driver); 
ac.movetoElement().build().preform(); 
0

Essayez ceci de se déplacer à un élément:

JavascriptExecutor jse = (JavascriptExecutor)driver; 
jse.executeScript(arguments[0].scrollIntoView();", webElement);