При использовании синтетических тестов браузера с использованием Selenium и Google Chrome мы периодически получаем Selenium-ошибку (см. ниже) на определенном веб-сайте. Поток:
- Загрузите стартовую страницу
- Введите поисковый запрос
- Сделайте снимок экрана
- Нажмите кнопку поиска
- Сделайте снимок экрана результатов
Ошибка возникает во время действия клика (шаг 4), но последний скриншот (шаг 5) противоречит этому и показывает, что поиск был инициирован (возможно только с помощью щелчка - некоторая форма автоматического поиска не реализована на сайт) и вернули результаты.
Ошибка:
Curl error thrown for http POST to /session/a4ec9662-1841-4809-9680-caf532b243b7/element/2/click
Operation timed out after 30001 milliseconds with 0 bytes received
Stack
- Контейнер Selenium/Chrome Docker:
selenium/standalone-chrome:3.0.1-germanium
- Facebook PHP WebDriver: см. в GitHub
- Docker PHP: см. в GitHub
Я нашел еще одно сообщение об этом, которое предложило установить эту переменную среды в контейнер докеров: DBUS_SESSION_BUS_ADDRESS=/dev/null
, однако это не сработало.
Как мы управляем контейнером из кода:
$Docker = new Docker();
$Manager = $Docker->getContainerManager();
$Container = $Manager->find($container_name);
if ($Container) {
if ($Container->getState()->getRunning()) {
// Restart container based on some logic around runtime and usage
} else {
$Manager->start($Container->getId());
}
}
Как мы обрабатываем действия 'click':
$Element = $this->WebDriverSession->findElement(By::cssSelector($css_selector));
if ($Element->isDisplayed()) {
$Element->click();
}
EDIT:
Я обновил наш контейнер Selenium до 3.4.0-einsteinium
и все еще вижу проблемы.
У нас всегда были проблемы с некоторыми целевыми веб-сайтами, которые не загружаются в первый раз, и Selenium бросает эту ошибку...
Curl error thrown for http POST to /session/cd18695c-bf88-482f-998e-4d8039c22359/url
... мы обойдем это, поймав эту ошибку и повторив x раз, прежде чем сдаться. Это обновление также не исправило это.