3

J'utilise Selenium WebdriverJs conjointement avec Mocha pour effectuer des tests sur Sauce Labs via Travis CI. J'ai isolé mon problème sans aucune dépendance de projet. S'il vous plaît aider. Donc, ce qui se passe est que si j'essaie de définir un objet supplémentaire ayant des propriétés de visiter l'URL et de faire défiler vers le bas, dans le script de test lui-même, puis d'utiliser cet objet, alors ça marche. Le lien vers le script de test est ici https://github.com/Princu7/open-event-webapp/blob/stripped/test/serverTest.jsSauce Labs n'exécutant pas javascript

Si nous le faisons comme ceci:

var eventPage = {                              

    init: function(webdriver) {                           
    this.driver = webdriver;                           
    },                                 

    visit: function(url) {                            
    return this.driver.get(url);                          
    },                                 

    scrollDown: function() {                            
    function scroll() {                             
     window.scrollTo(0, arguments[0]);                         
    }                                 
    return this.driver.executeScript(scroll, 800);                      
    }                                  
};  
var driver = // Initialize the selenium webdriver 
eventPage.init(driver) 
eventPage.visit('http://reddit.com') 
eventPage.scrollDown().then(function() { 
    console.log("This works fine on Sauce Labs"); 
}); 

Cela fonctionne très bien sur les Sauce Labs. Voici le lien vers Travis construire https://travis-ci.org/Princu7/open-event-webapp/builds/252652917 et le lien vers la sauce Créer https://saucelabs.com/beta/tests/4cf734a141fb42548fff1ee623130c44/logs#3

Maintenant, si je crée un fichier appelé eventPage.js et importer contenant toutes les fonctions ci-dessus dans le script de test, il ne travail. Le lien vers le ce fichier est https://github.com/Princu7/open-event-webapp/blob/stripped2/src/selenium/eventPage.js et le lien vers le script de test est https://github.com/Princu7/open-event-webapp/blob/stripped2/test/serverTest.js

module.exports = {                              

    init: function(webdriver) {                           
    this.driver = webdriver;                           
    },                                 

    visit: function(url) {                            
    return this.driver.get(url);                          
    },                                 

    scrollDown: function() {                            
    function scroll() {                             
     window.scrollTo(0, arguments[0]);                         
    }                                 
    return this.driver.executeScript(scroll, 800);                      
    }                                  
}; 

Et puis l'importer dans mon script de test,

var eventPage = src('path of the above file'); 
var driver = // Initialize the selenium driver 
eventPage.init(driver) 
eventPage.visit('http://reddit.com'); 
eventPage.scrollDown().then(function() { 
    console.log("This given an error"); 
}); 

Cela donne une erreur sur les Sauce Labs. Voici le lien vers la construction échouée sur Travis CI https://travis-ci.org/Princu7/open-event-webapp/builds/252655787 et le lien Sauce Labs https://saucelabs.com/beta/tests/5d240513c5e74e639b9abb320316592d/logs#3. Juste pour confirmation, les deux méthodes fonctionnent sur ma machine locale. S'il vous plaît aider. J'ai investi tellement de temps à ce sujet. Merci!! Bonne journée!

Répondre

1

Les modules sont mis en cache et votre module importé est un prototype de classe. Ainsi, vous devez créer une nouvelle instance pour éviter les conflits:

var EventPage = require('./EventPage.js'); 

var eventPage = Object.create(EventPage); 
eventPage.init(driver) 
eventPage.visit('http://reddit.com'); 
eventPage.scrollDown().then(function() { 
    console.log("This given an error"); 
}); 

EDIT

Le problème est lié à istanbul. L'application injecte une variable globale dans la fonction de défilement pour suivre l'exécution, mais la variable reste non déclarée puisqu'elle est exécutée dans le navigateur et non dans le nœud.

Une façon de surmonter ce problème est d'appeler executeScript avec le script comme une chaîne:

return this.driver.executeScript("window.scrollTo(0, arguments[0]);", 800); 
+0

Merci de nous aider. J'ai essayé mais ça donne toujours la même erreur. Voici le script de test mis à jour https://github.com/Princu7/open-event-webapp/blob/stripped3/test/serverTest.js et le même fichier qui est exporté https://github.com/Princu7/open-event-webapp/blob/stripped3/src/selenium/eventPage.js. Le Travis échoue et donne exactement la même erreur https://travis-ci.org/Princu7/open-event-webapp/builds/252785280. Aussi, voici le lien vers la Sauce Build https://saucelabs.com/beta/tests/746198536e80411c9c08fc3f32e2a2fa/logs#3. Que puis-je faire? J'ai déjà contacté le centre d'aide Sauce. Aide –

+0

J'ai regardé votre build défaillant. Il semble que votre problème soit lié à istambul et non au sélénium. Je suppose que istambul injecte une variable globale dans votre fonction 'scroll' pour suivre l'exécution, mais la variable reste non déclarée puisqu'elle est exécutée dans le navigateur et non dans le noeud. Pour résoudre ce problème, j'essaierais d'appeler la fonction comme une chaîne: 'return this.driver.executeScript (" window.scrollTo (0, arguments [0]); ", 800);' –

+0

Oui. C'était ça. Merci beaucoup. J'ai finalement une raison pour laquelle ça ne fonctionnait pas. Istanbul était à l'origine du problème. Je vais maintenant le modifier en conséquence. Merci beaucoup :) Vous êtes un sauveur !! –