Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как прервать выполнение цикла по условию.

java
webdriver
Теги: #<Tag:0x00007f7b61e46428> #<Tag:0x00007f7b61e46158>

(Олександр Зань) #1

Привет, коллеги.
Нужна ваша помощь.
Суть теста
Есть сайт интернет-магазина. Проваливаюсь на страницу с товарами. Выставляю фильтр по платьях (тематика магазина такова), получаю n страниц выборки фильтра. В цикле получаю название лота и проверяю в нем наличие слова “Dress”, то есть проверяю, что фильтр отработал корректно. После этого кликаю по кнопке следующая страница и делаю тоже. И так до последней страницы.
Проблема
Завершить цикл. Придумал для себя такое решение. У кнопки “Дальше” есть атрибут class=pagination_next. На последней странице атрибут изменяет состояние на class=disabled pagination_next. Всё, это единственное, что меняется с этой кнопкой. НО из цикла не выходит, на последней странице атрибут меняется, но цикл продолжает работать. Хотя в консоле прописывает корректный атрибут. Короче, в коде думаю всё станет ясно.


public void test() throws InterruptedException {
RegistrationMethod obect = new RegistrationMethod(driver);
ArrayList el = new ArrayList<>();

    obect.getPage(driver,linkOfPurchapsPage); //страница с товарами
    obect.click(checkBoxDressFilter); //фильтр платья
    outer: for (int i=0;i<50;i++) //цикл, чтобы кликнуть по странице
    {
        String str = driver.findElement(nextPageButton).getAttribute("class"); // получаю атрибут кнопки
        if (str=="disabled pagination_next")  break outer; //КАК БЫ ДОЛЖЕН ОБРЫВАТЬСЯ ЦИКЛ НО НЕТ
        System.out.println(str);
            Thread.sleep(2000);
            el.addAll(driver.findElements(titleOfNameProduct)); //добавляю в массив название лота
            for (int k=0; k<el.size(); k++)  //цикл для проверки заголовка лота
            {
                String st = el.get(k).getText();
                assertThat(st, containsString("Dress")); //каждый лот должен в имени содержать это
            }
            el.clear();
            obect.click(nextPageButton); //СЛЕДУЮЩАЯ СТРАНИЦА
        
    }
}

PS: Thread.sleep(); плз не комментируйте, у меня с этим отдельные счеты. :wink:


(Dmitrii Demin) #2

Скорее всего проблема тут, в сравнении не через equals.

Да и в целом кейс жесть… Если уж ДЕЙСТВИТЕЛЬНО такое надо проверять, то делайте через API (если конечно сам клиентсайд с API напрямую работает, с REST сервисами например)


(Олександр Зань) #3

Та просто логика в работе фильтров такая, что при выборе продукта есть кроме его названия ключевое слово, напр., Dress, при выборе футболки - T-shirt. Довольно удобно проверить, как по мне.

Сейчас попробую поплясать с бубном.


(Олександр Зань) #4

Да, equals действительно решил проблему. Спасибо! :slight_smile:


(t62) #5

тут наверное проблема в том что вы плохо знаете джаву., вот вам немного от сравнение строк:

String a1 = “hello”;
String a2 = “hello”;
String a3 = “HELLO”;
String a4 = a1;

a1 == a2 //false
a2 == a3 //false
a4 == a1 //true

a1.equals(a2)//true
a2.equals(a3)//false
a4.equals(a2)//true
a4.equals(a1)//true

“==” - это проверка равенства значение стоки то что находится в пуле, то есть есть ячейка памяти и сверка проводится на неё
equals - проверка на символы в стоке


(Олександр Зань) #6

Годнота. Спасибо.

Да знаю плохо, поскольку только начинаю изучать.