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

Проверка картинок для всех товаров на сайте //Codeception PhpBrowser

codeception
php
Теги: #<Tag:0x00007fedb7c5fbc8> #<Tag:0x00007fedb7c5fa88>

(rus) #1

Всем привет!

Что я хочу сделать: тест который проверяет нужный урл картинок для всех товаров на сайте. (196 категорий)

Возможности: PhpBrowser

Проблема: На первой странице категории товаров могут быть от 1 товара до 20 (если больше, то пагинация), первые 10 фоток у товаров подгружаются сразу, остальные подтягиваются по скроллу js’ом. Но есть атрибут благодаря которому, я теоретически могу посмотреть какая фотка будет подтягиваться по js’у.

Как я хочу сделать: Проверка фоток по атрибуту src, если в src стоит нужная мне фотка, то ок. Если в src стоит “заглушка” , я смотрю в атрибут data-loadimg где и расположена фотка которая подгружается после прокрутки страницы вниз.

Вот как я пытался сделать

class AwesomeCest
{
    public function tryAll(FunctionalTester $I)
    {
        $categoriesModel = new Categories();
        $allCategories = $categoriesModel->getAllCategoryLinks();

        $I->amOnPage('/');
            $categoriesLinks = $I->grabMultiple($allCategories, 'href');
            foreach ($categoriesLinks as $categoryLink) {
            $I->amOnPage($categoryLink);
            $products = $I->grabMultiple('#tpReviewsWrapMain li div.product-card-main', 'data-loadimg'); //Так не работает, надо указывать атрибут :(
            if (count($products) > 0) {
                foreach ($products as $product) {
                    if ($I->seeElement($product.'src="/noimage_small.png"')) {
                        if ($I->seeElement($product.'data-loadimg="/noimage_small.png"') || $I->dontSeeElement($product . 'data-loadimg')) {
                            echo $I->grabMultiple('#tpReviewsWrapMain li div.product-card-main', 'data-article');
                            //failed echo data-article
                        }
                    }
                }
            } else {
                //failed echo $categoryLink
            }

        }
    }
}

Код блока продукта у которого подгружается фотка:

<a href="/somehref/" class="product-card-main-image" data-article="*****">
<img class="is-centered" src="hereTruePhoto.jpg" title="some Title" > </a>

Код блока продукта у которого Не подгружается фотка:

<a href="/somehref/" class="product-card-main-image" data-article="****">
<img class="is-centered" style="opacity: 0" src="/noimage_small.png" data-loadimg="photoAfterLoadJS.jpg" title="some Title"></a>

ошибка в консоли:

AwesomeCest: Try all
Signature: AwesomeCest:tryAll
Test: tests/acceptance/00-pages/00-AwesomeCest.php:tryAll
Scenario --
 I am on page "/"
 I grab multiple ".cssSelector","href"
 I am on page "/somePage/"
 I grab multiple "li div.cssSelector"
 I see element "\n        \n                    \n                \n                                \nsrc="/noimage_small.png""
 ERROR

Подскажите, пожалуйста, как правильно мне это всё оформить


(Ray Romanov) #2

Давай начнем с того, ты внимательно читал документацию по PhpBrowser (WebDriver) в СС, похоже что нет.
Объясняю: все проверки see… и dontSee… это ассерты, т.е. они проверяют сами в себе и ничего не возвращают, повторяю ничего не возвращают, отсюда вывод: ты не можешь эти инструкции использовать в условиях!!!
Возвращают только инструкции начинающиеся на grab… и get…! Вот, теперь начни с перестройки самого теста.
ПЫСЫ: echo массивы не выводит, для этого используй print_r();