2017-06-13 1 views
0

Je suis assez sûr que c'est un simple mais je ne trouve pas la réponse.Sélénium PageObjects gestion des variables

J'ai un script qui est écrit en utilisant PageObjects. Tout cela est contrôlé par une classe "Run Test" maître et s'exécute sur plusieurs classes d'objets Page. Maintenant, le problème que je rencontre est que je dois récupérer une variable générée par le système à l'étape 3 de mon script, puis l'utiliser à l'étape 5, mais cette variable n'est pas transmise à cette classe.

Qu'est-ce que je fais mal?

Principale

class RunTest 
    { 

     static IWebDriver driver; 
     string PlanID; <- Tried setting here? 

     //Opens Chrome, Navigates to CTSuite, Logs in and Selects desired environment. 
     [TestFixtureSetUp] 
     public void Login() 
     { 
     ... Login Code 
     } 
     [Test] 
     public void Test5() 
     { 


      //Set back to home page 
      driver.FindElement(By.XPath("//*[@id='ajaxLoader']")).Click(); 

      var NetChange = new SwapNetwork(driver); 
      NetChange.ChangeTheNetwork("LEBC"); 

      var SearchForClient = new GoTo(driver); 
      SearchForClient.GoToClient("810797"); 

      var NewContract = new NewContracts(driver); 
      NewContract.AddNewContract("Test5", PlanID); //PlanID is set in this class 

      var NewFee = new NewFee(driver); 
      NewFee.AddNewFee("Test5"); 

      var StartChecks = new NewFee(driver); 
      StartChecks.ExpectationChecks("Test5", PlanID); //Then needs to be used here 
     } 

variable est fixé par

//Collect plan reference number 
      string PlanReference = driver.FindElement(By.XPath("//*[@id='ctl00_MainBody_Tabpanel1_lblRecord']")).Text; 
      Console.WriteLine("Plan Details: " + PlanReference); 
      var StringLength = PlanReference.Length; 
      PlanID = PlanReference.Substring(StringLength - 7, 7); 

Avec en public void AddNewContract(string testName, string PlanID)

première ligne dans la classe StartCheck est un Console.Writeline pour l'ID de plan, mais il retourne toujours rien

Répondre

2

Lorsque vous faites PlanID = PlanReference.Substring(StringLength - 7, 7);, vous définissez la valeur de la variable locale transmise à cette méthode. Il n'a aucun effet sur la variable PlanID dans RunTest. Vous nee retourner la nouvelle valeur et lui attribuer

string planID = PlanReference.Substring(StringLength - 7, 7); 
return planID; 

// or if you don't need it in the method just 
return PlanReference.Substring(StringLength - 7, 7); 

Et RunTest

PlanID = NewContract.AddNewContract("Test5"); // no need to send PlanID 
+0

J'ai essayé cette solution mais je reçois cette erreur sur la ligne de retour « Depuis » NewContracts.AddNewContract (chaîne) 'return void, un mot-clé return ne doit pas être suivi d'une expression d'objet' – Smithy7876

+0

@ Smithy7876 alors change 'void' en' string' – Guy

+0

Ah je ne savais pas que je pouvais le faire comme ça. Ouvre un tout nouveau monde de possibilités! Merci! – Smithy7876