2016-10-10 2 views
0

Ich habe ein vorhandenes Projekt, das Specflow und SpecRun verwendet, um einige Tests gegen Sauce Labs durchzuführen. Ich habe einen BeforeSenario Haken, der einen RemoteWebDriver und einen AfterScenario Haken erzeugt, der diesen nach unten schließt.Fehler beim Ausführen mehrerer Tests in Specflow/Selenium

Ich habe jetzt bewegt diese in ein anderes Projekt (kopiert verändert die Dateien über, nur der Namensraum) und der erste Test läuft gut, aber dann die folgende Fehlermeldung erhalten:

An exception of type 'OpenQA.Selenium.WebDriverException' occurred in WebDriver.dll but was not handled in user code

Additional information: Unexpected error. The command you just sent (POST element) has no session ID.

This is generally caused by testing frameworks trying to run commands after the conclusion of a test.

For example, you may be trying to capture a screenshot or retrieve server logs after selenium.stop() or driver.quit() was called in a tearDown method. Please make sure this process happens before the session is ended.

ich das Projekt verglichen haben und es verwendet die gleiche Version von SpecFlow, die gleiche .Net-Version. Ich kann keinen Unterschied zwischen den beiden Projekten sehen.

In meinen Schritten Ich habe die folgende Zeile:

public static IWebDriver driver = (IWebDriver)ScenarioContext.Current["driver"];

die ich denke, die Frage, wie stattdessen ist es eine neue Instanz davon aus den ScenarioContext des Erhalten der vorherigen Test-Version verwendet, die jetzt gewesen entsorgt.

Aber ich kann nicht sehen, warum das in einem anderen Projekt stattdessen funktioniert?

Ich bin mit dem Specflow Beispiel in Github here

UPDATE

Sieht aus wie ich das Problem gefunden haben. In der Default.srprofile war die testThreadCount 1, während der Wert in der Arbeitslösung 10 war. Ich habe jetzt aktualisiert, um zu passen und es funktioniert.

Nicht sicher, was dieser Wert sein sollte. Ich nehme an, es sollte nicht die gleiche Anzahl von Tests sein, aber wie komme ich dann zu meinem ursprünglichen Problem des freigegebenen Treiberkontexts?

Antwort

1

TestThreadCount gibt die Anzahl der Threads an, die von SpecFlow + Runner (auch bekannt als SpecRun) zum Ausführen der Tests verwendet werden. Jeder der Fäden ist getrennt. Der Standardwert ist AppDomain isolation, sodass jeder Thread in einer separaten AppDomain ausgeführt wird.

Im Beispiel von SauceLab gibt es 7 Szenarien und der Runner ist für die Verwendung von 10 Threads konfiguriert. Das bedeutet, dass jedes Szenario in einem anderen Thread mit einer eigenen AppDomain ausgeführt wird. Da kein Thread ein zweites Szenario ausführt, erhalten Sie diesen Fehler nicht im Beispiel

Mit nur einem Thread führt Ihr Thread mehr als ein Szenario aus und Sie erhalten dieses Problem.

Einfachste Lösung wäre, wenn Sie die statische aus dem Feld entfernen. Für jedes Szenario erhalten Sie eine neue Instanz der Bindungsklasse. Sie müssen sich nicht daran statisch erinnern.

Für ein besseres Beispiel dafür, wie Selen zu verwenden, mit SpecFlow & SpecFlow + einen Blick hier: https://github.com/techtalk/SpecFlow.Plus.Examples/tree/master/SeleniumWebTest

Sie haben für die Verwendung von SauceLabs über die RemoteWebDriver die WebDriver- Klasse anzupassen.

+0

Danke für diesen Link, der mein anderes Problem gelöst hat, wie man Specflow-Tests gegen mehrere Browser durchführt! Innerhalb von Sauce Labs kann ich zwei gleichzeitige Tests durchführen, heißt das, dass ich testThreadCount auf 2 setzen sollte? Was soll ich mit dem statischen Feld tun? – ADringer

+0

Ja, setze es auf 2 und entferne einfach die statische aus dem Feld. –

Verwandte Themen