Dusk Test не проходит, когда включен Chrome Headless

У меня есть элемент HTML, который должен отображаться только при загрузке первой страницы. Javascript устанавливает файл cookie, и элемент не отображается, если файл cookie установлен (PHP проверяет файл cookie и не отображает содержимое, если файл cookie существует).

Я пытаюсь сделать тест сумерек laravel для этого, и тест работает нормально, когда я отключаю --headless, но элемент все еще виден, если --headless включен.

Вот тест:

$browser->visit('/')
    ->visit(new ThePage($param))
    ->assertSee('element text')
    ->visit(new ThePage($param))
    ->assertDontSee('element text');

Похоже, это связано с тем, что javascript в безголовом хроме не устанавливает файл cookie.

Проверка ->assertPlainCookieValue('hide_element', 'hide'); поддерживает это.

Есть ли способ обойти это?

(редактировать) Вот элемент HTML, который я пытаюсь скрыть:

<div id="cookiePolicy" class="cookie-policy">
    <p>element text</p>
</div>

Скриншоты

Элемент показывает: введите здесь описание изображения

Скрывает элементы: введите здесь описание изображения

Вот JS, который устанавливает cookie:

document.cookie = 'hide_cookie_policy=hide;path=.domainname.com;expires= Fri, 31 Dec 9999 23:59:59 GMT';

person user2305673    schedule 31.07.2018    source источник
comment
JavaScript должен работать так же в безголовом режиме. Возможно, это проблема синхронизации, попробуйте заменить assertDontSee на waitUntilMissing.   -  person Jonas Staudenmeir    schedule 31.07.2018
comment
Ты какой-то гений! Я думаю, это работает... ... Я пробовал вставлять паузы, но это не сработало... огромное спасибо. Если вы сделаете это ответом, я отмечу его как правильный   -  person user2305673    schedule 31.07.2018
comment
О, чувак... Я был неправ! Я только что перепроверил документацию. Я не знал, что waitUnitllMissing искал селектор CSS. К сожалению, он все еще не работает.   -  person user2305673    schedule 31.07.2018
comment
Извините моя ошибка. Можете ли вы проверить отсутствие элемента с помощью селектора? Нет встроенного метода ожидания исчезновения текста.   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Без проблем! Я пробовал это безуспешно :(.   -  person user2305673    schedule 01.08.2018
comment
Можете ли вы опубликовать эту часть вашего HTML?   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Сделанный! Я безуспешно пытался использовать waitUntilMissing('.cookie-policy').   -  person user2305673    schedule 01.08.2018
comment
Но если вы используете ->pause(5000) и делаете скриншот, элемент не виден?   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Правильный. Когда безголовый режим отключен, все работает отлично... и выглядит так, как мы и ожидали.   -  person user2305673    schedule 01.08.2018
comment
А в безголовом режиме (скриншоты тоже можно)?   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Конечно, я выложил скриншоты. Элемент отображается так, как должен... страница перезагружается... а затем скрывается, как и должно быть.   -  person user2305673    schedule 01.08.2018
comment
Что происходит, когда вы используете waitUntilMissing('.cookie-policy')? Вы получаете исключение тайм-аута?   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Правильно, я получаю Facebook\WebDriver\Exception\TimeOutException: Ожидание 5 секунд для удаления селектора [.cookie-policy].   -  person user2305673    schedule 01.08.2018
comment
На вашей странице точно нет другого элемента .cookie-policy?   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Просто посмотрел, чтобы убедиться; это правильно   -  person user2305673    schedule 01.08.2018
comment
Когда вы получаете исключение тайм-аута, Dusk автоматически создает снимок экрана. Элемент виден на нем?   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Я забыл про скриншоты на фейле! Я только что проверил. Элемент по-прежнему отображается во второй раз на скриншоте.   -  person user2305673    schedule 01.08.2018
comment
Кстати, вокруг моего элемента в блейд-файле стоит следующее: @if($hideCookiePolicy === false) (элемент) @endif   -  person user2305673    schedule 01.08.2018
comment
Итак, файл cookie не устанавливается... Я просто не знаю, почему. Я сделал проверку, чтобы подтвердить это.   -  person user2305673    schedule 01.08.2018
comment
Можете ли вы опубликовать код JavaScript, который устанавливает файл cookie?   -  person Jonas Staudenmeir    schedule 01.08.2018
comment
Вопрос обновлен с помощью JS. Спасибо!   -  person user2305673    schedule 01.08.2018
comment
Давайте продолжим это обсуждение в чате.   -  person Jonas Staudenmeir    schedule 01.08.2018


Ответы (1)


Проблема была вызвана самозаверяющим SSL-сертификатом.

После добавления ->setCapability('acceptInsecureCerts', true) к DuskTestCase::driver() куки работает.

person Jonas Staudenmeir    schedule 01.08.2018
comment
Ты теперь мужчина, собака. - person Spencer Williams; 20.12.2020