J'écris des scripts d'automatisation pour un site Web de voyage. J'ai un cours pour HomePage. Dans la page d'accueil, je stocke la valeur que j'ai entrée dans le champ de destination afin de pouvoir comparer cette valeur sur la page de résultats de recherche pour m'assurer que le résultat de la recherche correspond à la valeur que j'ai entrée dans la destination. J'obtiens donc la valeur de la classe Homepage et je souhaite utiliser cette valeur dans la page de résultats de recherche. Voici mon code ci-dessous. J'essaye d'intégrer Selenium avec le framework TestNG. Dans le sélénium, je l'ai fait en utilisant la classe constructeur.

Classe HomePage:

 'public class HomePage extends MainSite{

    public static String Rdest ="";

    public HomePage(WebDriver driver) {
        // TODO Auto-generated constructor stub
    }
    @Test
    public void Home() throws InterruptedException
    {
        // Entering values in destination field
             SelectDestination();

                // Clicking calender to 5 months future month
                for (int i = 0; i <= 5; i++) {


driver.findElement(By.xpath("//div[contains(text(),'Select Departure 
Date')]/following::a[contains(@class,'ui-datepicker-next ui-corner-all')] 
[2]")).click();

                }

                //Calling SelectDate funtion to select date
                SelectDate();


                // clicking Search Flight button
                driver.findElement(By.xpath("//*[@id='btn-search- 
flight']")).click();


    }

public   String SelectDestination() throws InterruptedException{

    WebElement dest = driver.findElement(By.id("destination_0"));

        String[] des = { "Zurich", "Lahore", "Geneva", "Sydney", "Moscow", 
"Stockholm", "Cali", "Rome" };
        int index = (int) (Math.random() * 8);
         Rdest = des[index];
        dest.sendKeys(des[index]);
        System.out.println(index);
        //Char d =dest.charAt(index);
        System.out.println("Randomly selected destination:"+Rdest);
        Thread.sleep(5000);
        //dest.sendKeys(Keys.ARROW_DOWN);
        dest.sendKeys(Keys.RETURN);
        Thread.sleep(2000);


        System.out.println(Rdest);

        System.out.println("Destination Selected");
        //private static String Destval = Rdest;
        return Rdest;
    }

Je stocke la valeur de destination dans la variable Rdest

Comme je ne veux pas exécuter toute la fonction ci-dessus, je stocke uniquement la valeur Rdest dans une fonction distincte DestinationVal dans Variable dans le nom de Destination comme ci-dessous

public String DestinationVal()
{
    String Destination = Rdest;
    System.out.println("Destination function value="+Destination);
    return Destination;
}

Veuillez me guider comment utiliser cette valeur de destination dans la classe de résultats de recherche

    public void SelectDate()
    {
        //Selecting Departure Date
        DateFormat dateFormat = new SimpleDateFormat("dd");
        Date date = new Date();
        String Dd=dateFormat.format(date);
        System.out.println(dateFormat.format(date));
        System.out.println(date);
        driver.findElement(By.xpath("//div[contains(text(),'Select Departure 



Date')]/following::a[contains(text(),'"+dateFormat.format(date)+"')]"))
.click();

        //Selecting Return Date
        int Dr= Integer.parseInt(Dd);
        int abc = (int) (Math.random() * 5);
        Dr= Dr+abc;
        System.out.println("Number of days increased:"+Dr);
        String Dr1 = Integer.toString(Dr);
        driver.findElement(By.xpath("//div[contains(text(),'Select Return 
Date')]/following::a[contains(text(),'"+Dr1+"')]")).click();

    } '

SearchResult Classe:

public class SearchResult extends MainSite {
//@Test (Dataprovider="Destination")
public void Result() throws InterruptedException 
{

    // Waiting for the search result to get displayed
            Thread.sleep(10000);
            //Calling Homepage to use destination for comparition
            HomePage hp1 = new HomePage(driver);
            String returnVal = Destination;
            //System.out.println(returnVal);
            //Validating searched source
            String Src = 
driver.findElement(By.xpath("//span[contains(text(),'Flexible with 
')]/following::div[@class='loc'][1]/span[1]")).getText();
            //System.out.println(Src);
            if(Src.equals("Colombo"))
            { System.out.println("Search result match source location" );}
            else {System.out.println("Source locatoin is not match on second 
page");}
            String Dest = 
driver.findElement(By.xpath("//span[contains(text(),'Flexible with 
')]/following::span[contains(text(),'"+returnVal+"')][1]")).getText();
            //System.out.println(Dest);
            Thread.sleep(1000);
            if (Dest.toLowerCase().contains(returnVal)) 
{System.out.println("Search Result match Destination location");}
            else {System.out.println("Destination locatoin is not match on 
second page");}

            // Clicking on first book now button from the search result
            driver.findElement(By.xpath("//span[contains(text(),'Flexible 
with ')]/following::a[@class='btn-book'][1]")).click();
}
2
Samraj 23 mai 2018 à 13:51

3 réponses

Meilleure réponse

Vous devez suivre les 3 étapes ci-dessous dans la classe de la page d'accueil.

  1. Créer une variable privée pour la destination
  2. Créez une méthode publique pour renvoyer la valeur de la variable de destination
  3. Mettez à jour la valeur de la variable de destination dans votre méthode de test (après l'extraction de la valeur)

Résultat de la recherche:

  1. Créer sur un objet pour la classe HomePage en tant que page d'accueil HomePage = new HomePage ();
  2. Accédez à la méthode getDestinationVariable à l'aide de la classe HomePage Object comme homepage.getDestinationValue ();

Le code doit être ajouté dans la classe HomePage:

//add it as instance variable
private String destinationValue;

public getDestinationValue(){
     return destinationValue;
}

public String SelectDestination() throws InterruptedException{
    -- etc ---
   destinationValue=Rdest;
   return Rdest;
}

SearchResult : Le code ci-dessous doit être ajouté dans la classe de résultats de recherche

HomePage homepage=new HomePage();
homepage.getDestinationValue();
0
Subburaj 23 mai 2018 à 12:41

Vous pouvez appliquer cette logique:

Class TestA
{
    public void testMethod()
    {
    String testvalue = "XXXXXX"; 
    }    
}

Ici testvalue est la variable à laquelle vous voulez passer, La classe de destination, dans laquelle vous souhaitez utiliser la valeur de la classe de base:

Vous pouvez le récupérer en:

TestA OBJ = new TestA();
System.out.println(OBJ.testvalue); 
0
Ishita Shah 23 mai 2018 à 11:29

Créez dans votre site principal que vous étendez dans les deux classes, créez un getter / setter pour la destination:

private static String destination;

public String getDestination() {
    return destination;
}

public void setDestination(String destination) {
    this.destination = destination;
}

Vous pouvez donc faire ce qui suit:

HomePage homePage = new HomePage();
homePage.setDestination(homePage.SelectDestination()); //this will return Your random destination and store it in MainSite with get/set

Que simplement appeler

SearchResult searchResult = new SearchResult();
searchResult.getDestination();

J'espère avoir mis au point un problème. Mais ma suggestion est que vous mettiez toutes vos pages dans le modèle de conception PageObject, vérifiez cette page https: // martinfowler .com / bliki / PageObject.html, et vous aurez un code plus propre et facile à maintenir.

0
Kovacic 23 mai 2018 à 11:42