0

ich einige Tests in SpecFlow und Selen geschrieben haben. Ich möchte, dass sie vorerst der Reihe nach laufen. Aus irgendeinem Grund starten sie gleichzeitig im selben Browserfenster und stören sich gegenseitig. Ich möchte Tests das Browserfenster wiederverwenden, aber ich will sie natürlich nicht gleichzeitig auf dem gleichen Fenster laufen lassen.Specflow/Selenium-Tests laufen gleichzeitig auf demselben Browser (und stören)

Ich habe diese Klassen für die Wiederverwendung des Browser-Fenster einzurichten:

public class SeleniumContext 
{ 
    public ChromeDriver WebDriver { get; set; } 
    public SeleniumContext() 
    { 
     ChromeOptions options = new ChromeOptions(); 
     options.SetLoggingPreference(LogType.Browser, LogLevel.All); 
     options.AddArgument("no-sandbox"); 

     WebDriver = new ChromeDriver("./", options, TimeSpan.FromSeconds(240)); 
    } 
} 

[Binding] 
public class BeforeAllTests 
{ 
    private readonly IObjectContainer objectContainer; 
    private static SeleniumContext seleniumContext; 

    public BeforeAllTests(IObjectContainer container) 
    { 
     this.objectContainer = container; 
    } 

    [BeforeTestRun] 
    public static void RunBeforeAllTests() 
    { 
     seleniumContext = new SeleniumContext(); 
    } 

    [BeforeScenario] 
    public void RunBeforeScenario() 
    { 
     objectContainer.RegisterInstanceAs<SeleniumContext>(seleniumContext); 
    } 

    [AfterTestRun] 
    public static void afterRun() 
    { 
     seleniumContext.WebDriver.Quit(); 
    } 
} 

Ein Beispiel Schritte Klasse:

[Binding] 
public sealed class LogInSteps 
{ 
    private ChromeDriver driver; 

    public LogInSteps(SeleniumContext seleniumContext) 
    { 
     this.driver = seleniumContext.WebDriver; 
    } 

    //step definitions here 

} 

Wenn ich auf „Run All“ sie beide Feuer und laufen auf der selben Fenster:

enter image description here

ich möchte nicht, th em, um gleichzeitig im selben Fenster zu laufen. Wie kann ich sie nacheinander ausführen lassen? Die Verwendung einer Test-Playlist ist keine Option. Ich würde mich auch damit begnügen, auf verschiedenen Fenstern zu laufen, aber wenn sie sich so verhalten wie sie, stören sich die Tests gegenseitig und verursachen, dass sie versagen. Sie werden erfolgreich ausgeführt, wenn sie einzeln ausgeführt werden.

+0

Welchen Test Runner verwenden Sie? SpecFlow + Runner, NUnit, MSTest, xUnit? –

+0

"Ich möchte, dass Tests das Browserfenster erneut verwenden", gibt es einen Grund, warum Sie den Browser erneut verwenden möchten? Später erwähnst du "Ich würde mich auch damit begnügen, auf verschiedenen Fenstern zu laufen", das klingt widersprüchlich zur ersten Aussage. Wäre eine Lösung ausreichend, die diese Tests gleichzeitig auf separaten isolierten Browsern ausführt? – mrfreester

+0

@mrfreester Willst du aber nicht brauchen. Ich würde mit isolierten Browser-Instanzen in Ordnung sein. – tnw

Antwort

1

Die Lösung war Folgendes AssemblyInfo.cs hinzuzufügen:

[assembly: CollectionBehavior(DisableTestParallelization = true)] 

Dies sagt xUnit die Tests nicht parallel laufen zu lassen.

Referenz: https://xunit.github.io/docs/running-tests-in-parallel.html

+1

Sehr schön :) Für die separate Browser-Lösung können Sie den Treiber auch nicht statisch machen und in der 'BeforeScenario'-Methode einstellen. Prost! – mrfreester

+0

@mrfreester Gut zu wissen. Dies ist eine Route, auf die ich gehen kann, damit ich Tests gleichzeitig durchführen kann, ohne dass sie stören. Vielen Dank! – tnw

Verwandte Themen