2009-04-03 3 views
16

Par conception, Selenium crée une nouvelle copie de votre profil Firefox chaque fois qu'un nouveau test est exécuté. Je trouve que ce temps de copie est un goulot d'étranglement considérable, en particulier lors de l'exécution de 100 tests. (5-15 secondes pour copier le profil à nouveau).Est-il possible d'accélérer le temps de chargement du serveur Selenium?

Quelqu'un connaît-il un comportement de remplacement pour cela? Je préférerais que mon serveur Selenium réutilise le même profil firefox. Je sais que cela va à l'encontre de la philosophie de "configurer correctement vos appareils de test", mais c'est un raccourci que je suis prêt à prendre, car mes tests ne modifient pas suffisamment mon profil firefox pour compromettre les futurs tests.

Répondre

8

Je suis d'accord c'est un problème. C'est bien d'avoir à chaque fois une nouvelle copie d'un processus Firefox, mais un peu trop pour doubler le temps de démarrage en régénérant le profil de Firefox. Si vous ouvrez un rapport de bug sur http://jira.openqa.org et m'envoyez un courriel à [email protected], je serai heureux de m'assurer que nous avons une solution en place. PS: J'ai résolu ce problème comme un seul pour moi-même. Nous utilisons le même profil Firefox et juste nuke le cache et les cookies DB. Mais je devrais vraiment corriger ce changement à la source de sélénium.

+0

Pouvez-vous expliquer comment vous avez résolu cela? J'aimerais pouvoir réutiliser un objet du navigateur entre les tests. – djangofan

+3

voudrais aussi la solution, s'il vous plaît – DevDave

6

Il est tout simplement une question de déplacer le code ci-dessous à l'extérieur de votre configuration de test et dans la configuration du dispositif et en gardant une approche globale de l'instance de sélénium (code suppose NUnit.)

[TestFixtureSetUp()] 
public void FixtureSetup() 
{ 
    selenium = New DefaultSelenium("localhost", 4444, "*firefox", "http://localhost/"); 
    selenium.Start(); 
    selenium.SetTimeout("30000"); 
    selenium.Open("/"); 
} 

Votre configuration de test devrait alors regarder quelque chose comme ceci:

[SetUp()] 
public void SetUpTest() 
{ 
    selenium.Open("default.aspx"); 
    selenium.WaitForPageToLoad("30000"); 
} 
+0

Vous vous demandez simplement pourquoi vous avez un WaitForPageToLoad lorsque cela est inhérent à la méthode Open()? Il se peut que ce soit un post de 2009 :-) – Blundell

0

En utilisant MSTest, j'ai pu obtenir le pilote pour ouvrir une seule fenêtre Firefox pour tous les tests, plutôt que d'ouvrir et de fermer une nouvelle fenêtre pour chaque test, en initialisant le WebDriver dans ClassInitialize (et Cleanup), plutôt que TestInitialize:

static string path; 
     static IWebDriver driver; 
     static string baseURL; 

     [ClassInitialize] 
     public static void ClassInitialize(TestContext context) { 
      DirectoryInfo di = new DirectoryInfo(Directory.GetCurrentDirectory()); 
      path = Path.Combine(di.Parent.Parent.Parent.FullName, "Tests\\bin\\debug\\"); 
      driver = new FirefoxDriver(); 
      baseURL = "http://localhost:5555/"; 
     } 

     [ClassCleanup] 
     public static void ClassCleanup() { 
      driver.Quit(); 
     } 
0

Bien que ce soit une vieille question maintenant !! Le serveur Selenium ou RC est obsolète mais le même problème persiste avec Selenium Webdriver. Il faut environ 30 secondes pour lancer Firefox via webdriver.

Mais comme expliqué ici certaines personnes ont eu autour de cette « Après avoir désactivé inutilisées Les cartes réseau (situé dans le Panneau de configuration \ Réseau et Internet \ Connexions réseau)

il a été coincé au point:

ExtensionConnection connection = connectTo(exe.binary, profileToUse, "localhost"); 

https://groups.google.com/forum/#!topic/selenium-users/a2fNfF-mD_E

Bien qu'il ne fonctionne pas pour moi, mais on peut vouloir l'essayer pour vous !!

un autre wayout mi GHT être:

FirefoxProfile profile = new FirefoxProfile(); 
FirefoxBinary binary = new FirefoxBinary(@"path\to\firefox.exe"); 
FirefoxDriver driver = new FirefoxDriver(binary,profile); 
1

Une petite façon de réduire le temps de charger le profil est de supprimer les fichiers plus volumineux sur le profil firefox. Pour ce faire, configurez votre propre profil en exécutant la commande firefox.exe -p. Une fois que le profil est fait, allez dans les options et désactivez la mise en cache et autres fluff qui ne sont pas nécessaires pour les tests web. Ensuite, copiez votre profil à un nouvel emplacement et supprimez les fichiers SQL qui ne sont pas nécessaires. (sinon, lorsque vous l'ouvrez à nouveau, vous restaurez les fichiers supprimés qui maintiennent le profil très petit). Lorsque vous démarrez le test sélénium, référencez votre profil dans son nouvel emplacement.Avant cela, je copiais sur un profil de 50 Mo à chaque démarrage de test, et maintenant il copie sur un profil de 3-4 Mo, et le temps de démarrage est presque instantané.

Encore une fois, ce n'est pas une façon d'utiliser le même profil à nouveau, mais cela réduira le temps de copie de chaque profil.

Questions connexes