Как запустить тестирование с использованием Codeception в старом проекте на Yii2?

Здравствуйте! <br/><br/> Мы работаем над запуском тестов и исправили множество сопутствующих ошибок и несоответствий, однако теперь встречаем следующую ошибку: <br/><br/> <blockquote>Unable to retrieve Selenium logs : Illegal string offset 'timestamp'<br/> Unable to retrieve screenshot from Selenium: base64 decode() expects parameter 1 to be string, array given<br/> Screenshot and page source were saved into '/var/.........../backend/tests/_output/' dir<br/></blockquote> <br/><br/> Из того, что я понял, соединение с сервером установлено, и мы его запускаем следующей командой: <br/><blockquote>java -jar ./selenium-server-4.27.0.jar standalone --host 10.9.2.125 --port 4444 --selenium-manager true</blockquote> <br/><br/> Сервер успешно поднимается, интерфейс доступен по указанному порту - всё работает корректно. <br/><br/> Мы также можем открыть страницу, указанную в тесте, но ошибка возникает в момент попытки записать лог об ошибке и сделать скриншот. <br/><blockquote><br/> Backend \tests.acceptance Tests (1) -----<br/> Modules: Yii2, WebDriver<br/> CheckPagesFor500Cest: Check pages for500 errors<br/> Signature: backend\tests\acceptance\CheckPagesFor500Cest: checkPagesFor500Errors<br/> Test: tests/acceptance/CheckPagesFor500Cest.php: checkPagesFor500Errors<br/> Scenario --<br/> Destroying application<br/> Starting application<br/> [ConnectionWatcher] watching new connections<br/> [Fixtures] Loading fixtures<br/> [Fixtures] Done<br/> [TransactionForcer] watching new connections<br/> I am on page "/"<br/> [GET] <a href="https://mysite.com/" rel="nofollow">https://mysite.com/</a><br/> Unable to retrieve Selenium logs : Illegal string offset 'timestamp'<br/> Unable to retrieve screenshot from Selenium: base64 decode() expects parameter 1 to be string<br/></blockquote>
  • 28 января 2025 г. 10:54
Ответы на вопрос 1
Ошибка, с которой вы столкнулись при запуске тестов в Codeception с использованием Selenium, может быть связана с несколькими причинами. Давайте разберем возможные решения и шаги, которые могут помочь исправить данную проблему.

### 1. Обновление зависимостей
Убедитесь, что все используемые вами зависимости (Codeception, Selenium, драйверы) обновлены до последних стабильных версий. Иногда ошибки исправляются в новых релизах. Выполните команду:

```bash
composer update
```

### 2. Проверка настроек Selenium
Проверьте конфигурацию для вашего WebDriver в файле `codeception.yml` или в соответствующем файле конфигурации для тестов. В частности, убедитесь, что настройки для получения логов и параметров сессии корректны.

Пример конфигурации для WebDriver:

```yaml
modules:
    config:
        WebDriver:
            url: 'https://mysite.com'
            browser: chrome
            window_size: '1920x1080'
            # Добавьте следующие строки, если они отсутствуют
            restart: true
            capabilities:
                'goog:chromeOptions':
                    w3c: false
```

### 3. Обработка логов Selenium
Ошибка `Unable to retrieve Selenium logs: Illegal string offset 'timestamp'` может указывать на проблему с форматированием логов, которые Selenium возвращает. Вы можете попробовать отключить дополнительные логирования.

Проверьте, установлены ли в вашей конфигурации параметры для логгирования. Например:

```yaml
modules:
    config:
        WebDriver:
            log: false
```

### 4. Скриншоты
Ошибка `Unable to retrieve screenshot from Selenium: base64 decode() expects parameter 1 to be string, array given` говорит о том, что Selenium не может корректно вернуть скриншот в формате base64. Это обычно происходит из-за несовместимости с версиями драйверов.

Убедитесь, что вы используете совместимую версию ChromeDriver с вашей версией Chrome (или другого браузера, который вы используете). Также попробуйте в конфигурации WebDriver отключить автоматическое создание скриншотов:

```yaml
modules:
    config:
        WebDriver:
            dump_screenshot: false
```

### 5. Просмотр логов
Запустите сервер Selenium с более высоким уровнем логирования:

```bash
java -jar ./selenium-server-4.27.0.jar standalone --host 10.9.2.125 --port 4444 --selenium-manager true --log-level FINE
```

Это может помочь вам увидеть дополнительные детали, касающиеся ошибки, которые могут указать на ее происхождение.

### 6. Дополнительные проверки
- Убедитесь, что ваши тесты используют актуальный синтаксис и библиотеки Codeception.
- Проверьте, правильно ли указаны URL на страницы и есть ли доступ к ним.

Если после проверки всех этих шагов проблема все еще остается, возможно, необходимо будет внести изменения в код тестов для лучшей совместимости или обратиться к документации Codeception и Selenium для получения более детальной информации об используемых вами версиях.
Похожие вопросы