2013-06-17 4 views
0

Je rencontre un problème lors de l'exécution de tests Selenium dans NUnit à partir de Cruise Control .NET. J'ai un test simple qui fonctionne bien quand je cours depuis l'interface graphique de NUnit sur notre serveur d'intégration continue. Toutefois, lorsque le test NUnit est exécuté à partir de Cruise Control .NET sur le même serveur, le test échoue systématiquement. Les tests qui n'utilisent pas Selenium s'exécutent correctement à partir de l'interface graphique de NUnit et de Cruise Control.Exécution de sélénium via NUnit et Cruise Control .NET

[SetUp] 
    public void SetupTest() 
    { 
     Driver = new InternetExplorerDriver(); 
    } 



    [TearDown] 
    public void TeardownTest() 
    { 
     Driver.Quit(); 
    } 



    /// <summary> 
    /// Test basic Selenium functionality. 
    /// </summary> 
    [Test] 
    public void SeleniumTest() 
    { 
     Driver.Navigate().GoToUrl(TestConfig.TestURL); 
     IWebElement testEle = WaitForElement(Driver, By.Id, "body", TestConfig.TestWaitMS); 
     Assert.IsTrue(true); 
    } 



    private static IWebElement WaitForElement(IWebDriver driver, ByFunc byFunc, string elementId, int waitMs, 
     string waitOutput = null, int pause = 50) 
    { 
     bool elementFound = false; 
     int i = 0; 
     IWebElement webElement = null; 
     while (!elementFound && (i * pause) < waitMs) 
     { 
     try 
     { 
      webElement = driver.FindElement(byFunc(elementId)); 
      elementFound = true; 
     } 
     catch (NoSuchElementException) 
     { 
      i++; 
      Thread.Sleep(pause); 
      if (waitOutput != null) 
      Console.Write(waitOutput); 
     } 
     } 
     if (elementFound) 
     return webElement; 
     else 
     throw new NoSuchElementException(string.Format("Could not find element {0} after waiting {1}ms.", elementId, waitMs)); 
    } 

WaitForElement est juste une fonction d'aide qui me permet d'assigner d'attente spécifiques pour certains éléments plutôt que d'avoir un temps d'attente de couverture pour l'ensemble de test.

Le test échoue lorsque l'exception NoSuchElementException est générée par la fonction WaitForElement.

J'ai trouvé des liens sur Google indiquant que vous devez exécuter SeleniumRC en tant que service pour l'exécuter à partir de Cruise Control. Je ne pense pas que cela s'applique ici car j'utilise la version WebDriver. Corrigez-moi si j'ai tort, s'il-vous plait.

  1. IE version 8
  2. Régulateur de vitesse .NET 1.8.3.0
  3. NUnit 2.6
  4. Sélénium 2.0.0
+1

Est-ce que cela arrive avec d'autres pilotes? Quelle version de Selenium spécifiquement? (Actuel est v2.33) Quelle version de l'IEDriver? Votre code 'WaitForElement' est simplement un code dupliqué de ce qui est déjà présent dans la bibliothèque, en particulier' WebDriverWait'. Avez-vous essayé de l'exécuter sous un compte de service? Cela a-t-il fait une différence? – Arran

+0

@Arran Merci pour les suggestions. Je vais les essayer aujourd'hui. –

+0

@Arran Passer à Firefox a résolu le problème, donc je suppose que le problème se situe quelque part avec le pilote Internet Explorer. –

Répondre

0

Merci pour les pointeurs @Arran. Passer à un pilote Firefox a résolu le problème. Je suppose que la faute doit se situer quelque part dans le pilote Internet Explorer.

[SetUp] 
public void SetupTest() 
{ 
    Driver = new FirefoxDriver(); 
} 
Questions connexes