Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Несколько вопросов по AssertThis AssertThat

assert
java
webdriver
testng
selenium
Теги: #<Tag:0x00007fedb900ab50> #<Tag:0x00007fedb900aa10> #<Tag:0x00007fedb900a8d0> #<Tag:0x00007fedb900a790> #<Tag:0x00007fedb900a650>

(Mr Ds Low) #1

Ситуация:
Есть таблица. Сузим ее до двух столбцов.
В первом обычные конкретные цифры. 1, 4, 7, 99.
Во втором содержится ссылка на изображение, вида GetTrackCategoryImage?code={X},
где {X} цифры первого столбца. И каждой цифре первого столбца соответствует ссылка на изображение из второго. Но для номера 99 нет ссылки. Т.е. поле пустое.
Сначала я думал организовать DataDrive и сделать зависимость второго от первого. Но вероятно слишком тупой, чтобы нормально это сделать с проверкой на пустое поле. Вернее, думаю это займет опр. время, и конструкция получится громоздкой, но мне кажется это того не стоит и это неправильный подход.
Что я хотел сделать:

softly.assertThat(imgSrc).startsWith("/MPVK/ExcessFacts/GetTrackCategoryImage?code=").
                                          .as("Категория изображения не соответствует категории ТС",
                                              "Expected: code=" + ReportsFilterTest.trackCategory, "Actual: code=" + imgSrc);

Для взятия линка на изобр. используется:

for (WebElement anchorTagElement : ReportsFilterTest.trackCategoryImage) { 
                    if (anchorTagElement != null) {
                        String imgSrc = anchorTagElement.getAttribute("src");

Здесь вопрос как вклинить сюда сравнение на containsOnly или containsExactlyInAnyOrder. Что-то вроде and{contains...} после startsWith и игнорирует пустую ссылку на 99.

Или как можно выйти из данной ситуации?
Есть конечно вариант извлечь из столбца xpath, в котором содержится только ссылка startsWith. Но это такой себе костыль, который не проверит поля полностью.

И еще доп. вопрос как сослаться на аргументы в первой конструкции для contains, если они выглядят как, пример: .contains("12", "235").as(descrp, {что_написать_сюда}). Где {что_написать_сюда} это какое-то ссылочное поле на “12”, “235”. Или обязательно надо засовывать “12”,“235” в какую-то переменную?

Если не понятно, можно уточнить.


(Mr Ds Low) #2

В общем тот человек, который писал, что проекция своих проблем на бумаге поможет в их решении - был прав.

Но то, что я писал выше это ерунда.

Главная проблема, как провести assert, чтобы проверить, что код link’а соответствует соседнему коду с цифрой, а не взят откуда-то еще.


(Levotsky Vadim) #3

Ну наверное надо распарсить нужную часть линка и проверять


(Fuji F) #4

Для кода линки с пустой колонкой, локатор такой же? Просто без значения ?


(Mr Ds Low) #5

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


(Mr Ds Low) #6

Раньше я проделывал “трюк” как сделать из зеленого желтое.
Теперь нужно из желтого сделать зеленое. :thinking:
Есть таблица DataProvider:

И два ассерта для каждого столбца.

objMainPageLinks.colourPanelsTest(colourPanelNames);
objMainPageLinks.greyPanelsTest(greyPanelNames);

По первому ассерт проходит.
Во время второго натыкается на нечто (пустое поле в таблице) (тут временно я вставил либо null, либо “”) и кидает желтое (AssertionError). Желтое потому, что первый assert по x дает положительный рез-т соответственно.

Может кто-то подсказать как сделать skip этого поля / сделать правильный catch чтобы не перекрыть “актуальные” проверки / др. вариант?
Или нужно просто забить и отнести к “нестабильным” тестам?


(Mr Ds Low) #7

Кароче сравнение разных столбцов без включения одного из номеров сделал след. образом (До этого следует ассерт по trackCategory):

            List<String> trackCategory = new ArrayList<>();
            for (WebElement panel : ReportsFilterTest.trackCategory) {
                trackCategory.add(panel.getText());
            }
            List<String> categoryImage = new ArrayList<>();
            for (WebElement catImg : ReportsFilterTest.trackCategoryImage) {
                categoryImage.add(catImg.getAttribute("src"));
            }
            int x = 0;
//            int y = 0;
            for (int i = 0; i < trackCategory.size(); i++) {
                System.out.println(trackCategory.get(i));
                if (trackCategory.get(i).equals("99")) {
                    x++;
                } else if (trackCategory.get(i).equals("1") || trackCategory.get(i).equals("5") || trackCategory.get(i).equals("11")) {
                            /*softly.*/assertThat(categoryImage.get(i-x)
                                                               .contains("{ссылка}" +EXPECT_TRACK_CATRY));
//                            y++;
                            System.out.println(categoryImage.get(i-x));
                }
            }

Можете поделиться мыслями, если есть какие-то по оптимизации.
else if по-идее не нужен, да.