Как запустить цикл foreach() в тесте? Codeception, PhpBrowser

Проблема заключается в том, что у меня не запускается цикл foreach(), codeception будто его игнорирует и пропускает.

Код:

$aLinkShow = $I->grabMultiple(".category-links > ul a", 'href');
        foreach($aLinkShow as $key => $value)
        {
            $I->amOnPage($value);
            $I->canSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
        }

После запуска теста, ошибки как таковой нет, тест пройден успешно до запуска цикла, дальше он его пропускает и идет к следующему тесту.

Настройки базовые —

actor: FunctionalTester
modules:
    enabled:
        - PhpBrowser:
                url: *url*
        - \Helper\Functional

Скорее всего просто массив пустой. Это единственная причина почему цикл игнорируется :slight_smile:

2 лайка

Точно! Спасибо! :slight_smile:
Это произошло из-за того, что я делаю

 $I->click('css');
*Тут надо добавить коллбек*
        $aLinkShow = $I->grabMultiple(".category-links > ul a", 'href');
        foreach($aLinkShow as $key => $value)
        {
            $I->amOnPage($value);
            $I->canSeeResponseCodeIs(\Codeception\Util\HttpCode::OK);
        }

Подскажите плиз коллбек для ожидания загрузки страницы?

Callback’ов нет, это не JS :slight_smile:
Но есть многочисленные wait* методы которые помогут дождаться нужного события.

Хотя стоп это ж PHPBrowser: там ждать нечего. Он показывает весь HTML котрый отдал сервер. Если что-то было сгенерировано на клиент-сайде через JS он это проигнорит. В таком случае надо использовать WebDriver

1 лайк

а какие wait* лучше использовать?
Надо наверное сказать что у меня вообще wait не работает, сразу тест падает. Да и просто wait() и какое-то число наугад не хотелось бы писать.

В PhpBrowser wait() не работает от слова вообще.
Если в PhpBrowser на страниче чего-то не отображается - то это уже всё, надо менять PhpBrowser на WebDriver

1 лайк