Как вызвать глобального arraylist другим методом - PullRequest
0 голосов
/ 28 июня 2019

Я новичок в селене, создал страницу фабрики.Вот мой сценарий:

Я объявил публичного массива (скажем, List1) на уровне класса, который хранит значение из метода method1, который прекрасно работает при печати в том же методе.Сохраненный таким же образом, arraylist (List2) на том же уровне класса, в котором хранится значение из метода method2.

Теперь при сравнении List1 с List2 в method2, List2 при печати отображается пустым, поэтому мой код не удался.

Не уверен, что правильный подход


    public class AddNewCase {
        WebDriver driver;

        public List<String> List1 = new ArrayList<>(); // Created from Method1
        public List<String> List2 = new ArrayList<>(); // Created from Method2

        public AddNewCase(WebDriver driver) {
            this.driver = driver;
            PageFactory.initElements(driver, this);
        }

        public void Method1() throws Exception {
            // ***some code***
            syso(List1) //Shows correct data
        }

        public void Method2() throws Exception {
            // ***some code***
            syso(List2) //Shows correct data
        syso(List1) // It shows blank data in this method, so the below if condition fails.
            if (List1.equals(List2)) {
                syso("testcase Pass")
            }
        }
    }

Если list1 соответствует списку 2, результат должен показать pass.Не уверен, как вызвать глобальный массив для другого метода.Когда я вызываю List1 в методе 2, результат отображается пустым.

Ответы [ 4 ]

1 голос
/ 01 июля 2019

Я разобрался в проблеме.В коде нет проблем с созданием методов и хранением переменных.Проблема была в тестовом сценарии. В одном тесте я несколько раз вызывал класс, где находятся методы.Я создал несколько объектов класса, который был проблемой.Я удалил несколько объектов и в одном объекте я вызвал все методы один за другим.Все работало нормально.

Спасибо всем за ваши ценные отзывы, я мог бы узнать больше и из ответов других.

0 голосов
/ 28 июня 2019

Ваш код кажется правильным. Однако, если порядок выполнения ваших методов не является синхронным, тогда список, созданный другим методом, может иметь пустой список. Чтобы подтвердить это, вы можете добавить sysoout для первого списка в Method2. Путем добавления приоритета @Test (priority = 1) для Method1 и @Test (priority = 2) для Method2 может решить вашу проблему.

0 голосов
/ 28 июня 2019

Я бы посоветовал вам изменить свой подход. Выполнение этого таким образом предотвратит параллельное выполнение и может вызвать проблемы, вероятно, то, что вы видите.

Вместо этого Method1() и Method2() возвращают List<String> и затем выполняют сравнение (предпочтительно Assert из TestNG или JUnit) в самом тестовом скрипте. Измените объект вашей страницы на что-то вроде ниже. Я удалил public List1 и List2 и создал их внутри соответствующих методов, Method1() и Method2(). Эти методы возвращают списки, и затем сравнение выполняется внутри тестового скрипта. Рекомендуется иметь проверки в тестовом сценарии и избегать проверок внутри объектов вашей страницы.

public class AddNewCase {
    WebDriver driver;

    public AddNewCase(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    public List<String> Method1() throws Exception {
        List<String> List1; // declared here, added to below
        // ***some code***
        return List1;
    }

    public List<String> Method2() throws Exception {
        List<String> List2; // declared here, added to below
        // ***some code***
        return List2;
    }
}

Затем в вашем тестовом скрипте добавьте assert. В приведенном ниже примере используется TestNG .

assertEquals(addNewCase.Method1(), addNewCase.Method2(), "Verify the two lists are the same");
0 голосов
/ 28 июня 2019

Метод ArrayList equals возвращает true, только если оба списка содержат одинаковое количество элементов в порядке, в противном случае возвращает false. Сортируйте оба списка, прежде чем сравнивать их следующим образом.

Collections.sort(list1);
Collections.sort(list2);

if(list1.equals(list2))
   System.out.println("Pass");
else
  System.out.println("Fail");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...