Как передать значения из одного класса в другой класс в среде TestNG - PullRequest
0 голосов
/ 23 мая 2018

Я пишу сценарии автоматизации для туристического сайта.У меня есть один класс для HomePage.На домашней странице я сохраняю значение, которое я ввел в поле назначения, чтобы я мог сравнить это значение на странице результатов поиска, чтобы убедиться, что результат поиска соответствует значению, которое я ввел в пункте назначения.Итак, я получаю значение из класса Homepage и хочу использовать это значение на странице результатов поиска.Вот мой код ниже.Я пытаюсь интегрировать Selenium с платформой TestNG.В селене я сделал это, используя класс конструктора.

Класс 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;
    }

Я храню целевое значение в переменной Rdest

Поскольку я не хочу запускатьвсю вышеупомянутую функцию, я сохраняю только значение Rdest в отдельной функции DestinationVal в переменной с именем Destination, как показано ниже

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

Пожалуйста, подскажите, как я могу использовать это значение Destination в классе результатов поиска

    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:

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();
}

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Создайте на своем главном сайте, который вы расширяете в обоих классах, создайте получатель / установщик для пункта назначения:

private static String destination;

public String getDestination() {
    return destination;
}

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

, поэтому вы можете сделать следующее:

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

, чем просто вызвать

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

Надеюсь, я понял причину проблемы.Но я предлагаю, чтобы Вы поместили все свои страницы в шаблон дизайна PageObject, проверьте эту страницу https://martinfowler.com/bliki/PageObject.html,, и у Вас будет более чистый код, и его легко обслуживать.

0 голосов
/ 23 мая 2018

Вам необходимо выполнить следующие 3 шага в классе домашней страницы.

  1. Создание одной закрытой переменной для назначения
  2. Создание одного открытого метода для возврата значения переменной Destination
  3. Обновление значения переменной назначения в вашем методе теста (после извлечениязначение)

SearchResult:

  1. Создать на объекте для класса HomePage как домашнюю страницу HomePage = new HomePage ();
  2. Получите доступ к методу getDestinationVariable, используя класс HomePage Object как homepage.getDestinationValue ();

Код необходимо добавить в класс HomePage:

//add it as instance variable
private String destinationValue;

public getDestinationValue(){
     return destinationValue;
}

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

SearchResult : следующий код необходимо добавить в класс результатов поиска

HomePage homepage=new HomePage();
homepage.getDestinationValue();
0 голосов
/ 23 мая 2018

Вы можете применить эту логику:

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

Здесь testvalue - это переменная, в которую вы хотите передать, Целевой класс, в котором вы хотите использовать значение Базового класса:

Вы можете получить его:

TestA OBJ = new TestA();
System.out.println(OBJ.testvalue); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...