Подтвердить что ты не робот

Selenium WebDriver выбрасывает ошибку для действия Click, но Click действительно успешно

При использовании синтетических тестов браузера с использованием 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 раз, прежде чем сдаться. Это обновление также не исправило это.

4b9b3361

Ответ 1

Такая же ошибка сообщается в docker-selenium issue 163 и, по-видимому, относится только к селену.
Вот почему сейчас (август 2017) SeleniumHQ/selenium issue 4384 (теперь октябрь 2017 года закрыт как "проблема производительности" ).

Эта ошибка также была обнаружена в docker-selenium issue 20 (2015) с этот комментарий, больше о сбое Chrome:

  • Начинается в привилегированном режиме:

    docker run --privileged
    
  • Исправить малый размер /dev/shm

    docker exec $id sudo umount /dev/shm
    docker exec $id sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm