2017-12-06 1 views
1

Wie erhält man den TestFixture-Parameterwert als String und geht an Switch-Anweisung? Ich habe versucht, aber kann das Problem nicht lösen "Member 'ClassLibrary1.Browsers.browser1' kann nicht mit einer Instanzreferenz zugegriffen werden, sondern mit einem Typnamen zu qualifizieren". Init-Methode sollte eine statische sein, weil ich dies in einer anderen Klasse verwendet habe.Wie erhält man den Wert von parametrisierten Testgeräten?

-Code hier:

[TestFixture("Chrome")] 
public class Browsers 
{ 
    public static IWebDriver webDriver; 
    private static string baseURL = "https://www.google.com"; 
    private static string browser; 

    private static string browser1; 

    public Browsers(string browser1) 
    { 
     this.browser1 = browser1; 
    } 

    public static void Init() 
    { 
     switch (browser1) 
     { 
      case "Chrome": 
       webDriver = new ChromeDriver(); 
       break; 
      case "IE": 
       webDriver = new InternetExplorerDriver(); 
       break; 
      case "Firefox": 
       webDriver = new FirefoxDriver(); 
       break; 
     } 
     webDriver.Manage().Window.Maximize(); 
     Goto(baseURL); 
    } 
    public static string Title 
    { 
     get { return webDriver.Title; } 
    } 
    public static IWebDriver getDriver 
    { 
     get { return webDriver; } 
    } 
    public static void Goto(string url) 
    {    
     webDriver.Navigate().GoToUrl(url); 
    } 
    public static void Close() 
    { 
     webDriver.Quit(); 
    } 
} 

Antwort

0

Das Problem ist, dass Sie innerhalb der Konstruktor der Klasse zu einem statischen Feld zuweisen möchten. Der Konstruktor wird ausgeführt, wenn eine Instanz der Klasse erstellt wird. So können Sie nicht tun:

//This doesn't compile: 
public class Browsers 
{ 
    //snip 
    private static string browser1; 

    public Browsers(string browser1) 
    { 
     this.browser1 = browser1; 
    } 
    //snip 
} 

, weil es keine this.browser1 Feld - browser1 erklärt wurde als static so nicht auf einer Instanz nicht existiert.

Ich glaube, Sie wurden nach etwas streben wie diese statt:

[TestFixture("My String")] 
public class When_Working_Up_A_Storm 
{ 
    public When_Working_Up_A_Storm(string myString) 
    { 
     _myString = myString; 
    } 

    private string _myString; 

    [Test] 
    public void Magic_Happens() 
    { 
     Assert.AreEqual("My String", _myString); 
    } 
} 
0

Als C# sagt Ihnen, Sie können keine Instanz, die aus einer statischen Methode zuzugreifen. Der Grund für das Problem in Ihrem Fall scheint die Tatsache zu sein, dass nicht wirklich Ihr Testgerät ist, obwohl Sie das Attribut darauf platziert haben. Es sieht wie eine statische Klasse aus, die verschiedene Hilfsmethoden enthält. Ist das richtig?

Die korrekte Verwendung ist die TestFixtureAttribute auf eine TestFixture, d. H. Eine Klasse, die Tests enthält. Im Konstruktor dieser Klasse kann der Wert des Arguments gespeichert werden, genau wie Sie es getan haben. Er kann dann die richtige Browserinstanz entweder direkt oder mit Methoden in einer Dienstprogrammklasse initiieren.

Sie haben nicht erklärt, was Sie meinen, indem Sie die statische Init-Methode in einer anderen Klasse verwenden, also bin ich nicht darauf eingegangen, aber ich werde diese Antwort hinzufügen, wenn Sie es erklären.

Verwandte Themen