2017-07-04 1 views
0

Mon problème est que lorsque le nom est supposé être défini par le pilote dans la méthode FetchName, un message d'erreur indique que le pilote est null. Puis-je transmettre l'instance de pilote active d'une manière ou d'une autre pour continuer à récupérer des données?Comment passer la référence au pilote actif entre les classes

[TestFixture] 
public class TestBase 
{ 
    protected IWebDriver driverChrome; 

    [SetUp] 
    public void Setup() 
    { 
     driverChrome = new ChromeDriver(); 
    } 


    [TearDown] 
    public void CleanSite() 
    { 
     driverChrome.Quit(); 
    } 

} 

Classe "Tests" où je crée toutes mes méthodes [test].

public void tests: Testbase 
{ 
     [Test] 
     public void testmethods() 
     { 
      string blabla = driverChrome.FindElement(By.id("dsd")).Text; 
      Reuse.FetchName(out string firstname, out string lastname); 
      Assert.isTrue(firstname.equals(lastname)); 
     } 
} 

Une classe "Réutilisation" où j'ai des méthodes que les méthodes [test] utiliseront plusieurs fois.

public class Reuse: Testbase 
{ 
    [Test] 
    public void FetchName(out string firstname, out string lastname) 
    { 
      firstname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text; 
      lastname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text; 
    } 
} 
+0

Vous pouvez vous faire driverChrome comme une variable globale ou écrire un setter getter pour obtenir l'instance du pilote. – Alok

Répondre

0
  1. Reuse classe n'est pas un test. Lorsque vous ajoutez l'attribut [Test] à la méthode, la méthode doit contenir une assertion. Donc, Reuse ne doit pas hériter de Testbase.
  2. Si vous voulez avoir une classe qui contient plusieurs actions, elle doit être une classe statique.
  3. WebDriver est un processus autonome. Vous pouvez utiliser plusieurs classes ou plusieurs processus pour y accéder. Ils auront tous le même WebDriver.

L'exemple ci-dessous montre comment modifier la classe Reuse et comment l'utiliser.

public static class Reuse 
{ 
    public static IWebDriver driverChrome; 
    public static void FetchName(out string firstname, out string lastname) 
    { 
      firstname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text; 
      lastname = driverChrome.FindElement(By.XPath("/html/body/div[2]/table/tbody[last()]/tr/td[2]/div")).Text; 
    } 
} 

Vous pouvez appeler ça comme ça.

public void tests: Testbase 
{ 
    [Test] 
    public void testmethods() 
    { 
     string blabla = driverChrome.FindElement(By.id("dsd")).Text; 
     Reuse.driverChrome = driverChrome; 
     Reuse.FetchName(out string firstname, out string lastname); 
     Assert.isTrue(firstname.equals(lastname)); 
    } 

}