1

J'ai donc un fichier .feature dans lequel j'ai ajouté 4 scénarios.C# Les tests Selenium WebDriver échouent lors de l'exécution consécutive mais réussissent lorsqu'ils sont exécutés individuellement

fichier .feature

Feature: BleKeys beheren 
Het beheren van BLE-keys 
d.m.v. de WebInterface. 

@notfs 
Scenario: BLE-key toevoegen aan database 
    Given I'm at the BleKey/Create page. 
    And I have entered acceptable BLE-data. 
    When I press Create 
    Then The BLE-key should be added to the database. 

@notfs 
Scenario: BLE-key data aanpassen 
    Given There is a BleKey in the database. 
    And I'm at the BleKey/Edit page of that BleKey 
    When I edit the MAC-Adress 
    And I edit the Conditional Report 
    And I edit the Flag 
    And I edit the Distance 
    And I edit the Reference 
    And I edit the ExtraCfg 
    And I press Save 
    Then The BleKey should have changed correctly. 

@notfs 
Scenario: BLE-key data verwijderen 
    Given There is a BleKey in the database. 
    And I navigate to the Delete page of that BleKey 
    When I press Delete 
    Then The BleKey should be deleted. 

@notfs 
Scenario: BLE-key data van 1 sleutel bekijken 
    Given There is a BleKey in the database. 
    And I navigate to the Details page of that BleKey 
    Then The correct data of that BleKey should be displayed 

Maintenant, quand je lance ces tests dans Visual Studio (ReSharper Unité Sessions Fenêtre d'essai) tous réussissent individuellement, mais lorsqu'il est exécuté de façon consécutive le premier réussit, mais un test consécutif échoue avec l'exception suivante:

OpenQA.Selenium.WebDriverException: erreur inattendue. System.Net.WebException: Impossible de se connecter au serveur distant ---> System.Net.Sockets.SocketException: Aucune connexion n'a pu être établie car la machine cible activement refusé 127.0.0.1:5595

Comme vous peut voir le test tente de se connecter à une adresse IP locale-alors qu'il devrait être à l'URL naviguait de base:

http://localhost:58759/ + contrôleur + méthode en fonction du test. Je crée l'instance de WebDriver dans mon fichier d'étapes.

Comme si:

public class BleKeyBeherenSteps 
    { 
     public static RemoteWebDriver RemoteWebDriver = new ChromeDriver(); 
     public WebinterfaceSelenium SeleniumTest = new 
     WebinterfaceSelenium(RemoteWebDriver); 
     public Navigate Navigate = new Navigate(RemoteWebDriver); 
     public Check Check = new Check(RemoteWebDriver); 
     public Edit Edit = new Edit(RemoteWebDriver); 
     public Delete Delete = new Delete(RemoteWebDriver); 
     private readonly BeheerContext _db = new BeheerContext(); 
    } 

Et dans mes méthodes naviguer comme ceci:

Driver.Navigate().GoToUrl(Adress + BleKeyIndexUrl); 

Où Adresse = "http://localhost:58759/"

Et BleKeyIndexUrl = "BleKeys/Index"

Donc, pour Pour une raison quelconque, WebDriver navigue vers une adresse IP locale au lieu de l'adresse localhost. Editer: Après chaque test, je ferme le pilote avec: Driver.Quit(); Je suppose que pour une raison quelconque, après le premier test, la propriété Driver.Url est perdue.

Répondre

2

Ne vous inquiétez pas de l'ambiguïté de l'adresse localhost à adresse IP, localhost résout généralement à 127.0.0.1.

L'échec des tests unitaires consécutifs est souvent dû à l'utilisation de déclarations statiques dans le code du programme d'application. J'ai traité ce problème ce matin et j'ai dû réinitialiser une variable statique gênante dans mon application au début de chaque test unitaire.

+0

J'ai rendu le RemoteWebDriver non statique en initialisant les propriétés dans le constructeur et maintenant cela fonctionne très bien. Merci de répondre – Jeroen

+0

Je devrais lire sur les champs statiques et les variables :) – Jeroen

+0

@Jeroen: Désolé, je ne peux pas aider avec le problème de port sur la machine distante. Je suggère que votre problème actuel a évolué au point où une nouvelle question de SO est nécessaire car il s'agit maintenant de configurer des numéros de port locaux de test cohérents sur une machine de test dédiée. Je suppose que vous savez déjà que le numéro de port utilisé par un site Web de développement est défini dans l'onglet Web du projet Web? Est-ce une différence Debug/Release? – camelCase