Chrome / Firefox не сохраняют файлы cookie при вызове через (Watir-)Webdriver?

Я работаю над проектом для клиента, используя Ruby & Watir. Он требует, чтобы сеанс восстанавливался при перезагрузке приложения (чтобы сохранить его состояния входа). Это нормальное поведение Chrome (кажется), и Firefox имеет возможность сделать это.

Я пробовал все, что мог придумать, и не могу заставить это работать с помощью watir-webdriver. Я указал Watir использовать определенный профиль (который, как вы думаете, решил бы проблему), убедился, что все настройки правильные (которые они есть, потому что они работают, когда я запускаю браузер сам). Я пробовал Chrome с различными переключателями и параметрами профиля, которые, как я думал, могут помочь. Ничего.

Итак, вопрос в том, почему это происходит, и что я могу сделать, чтобы решить или обойти эту проблему? На данный момент у меня почти закончились идеи. Я даже попытался сохранить и перезагрузить куки вручную в IRB, но безрезультатно...

Я знаю, что это должно быть возможно, как когда Я вхожу на веб-сайты вручную, закрываю браузер и снова открываю его, я все еще вошел в систему. Мне нужно воспроизвести это точное поведение, но что-то идет не так где-то между ручным экземпляром Chrome/Firefox и тем, который контролируется Watir.

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

Если кто-нибудь может мне помочь, это было бы очень оцененный.

3 ответов


Я считаю, что по дизайну webdriver всегда начинает сеансы с чистого листа cookie wise.

Это может сделать вещи немного сложнее, когда вы пытаетесь сделать тест, который имитирует закрытие и повторное открытие браузера (который действительно во многом, тестирование браузера больше, чем сайт, так как сервер действительно не имеет возможности узнать, что браузер был закрыт и вновь открыт)

Если вы хотите попытаться сохранить и восстановить куки, важное предостережение подвергается, читая некоторые документы webdriver, в разделе о cookies, где говорится это

прежде чем мы оставим эти следующие шаги, вы можете быть заинтересованы в понимание того, как использовать куки. Прежде всего, вам нужно быть на домен, для которого файл cookie будет действителен. Если вы пытаетесь настроить cookies перед началом взаимодействия с сайтом и домашней страницей большой / занимает некоторое время, чтобы загрузить альтернативу, чтобы найти меньшую страницу на сайте, как правило, 404 страница-это небольшой (http://example.com/some404page)

поэтому, если вы собираетесь попытаться сохранить куки, а затем восстановить их после отскока браузера, вам может потребоваться перейти в какое-то место на сайте, прежде чем пытаться воссоздать куки.

Я бы попробовал это через IRB и посмотреть, что вы получите


если вы используете любую существующую папку как user-data-dir переключатель, вы сохраняете все файлы и сеансы после закрытия браузера. В противном случае он создает папку и удаляет ее (со всеми файлами cookie, tmp и сеансами) после этого.

таким образом, вы используете любой из существующих профилей, расположенных, как описано здесь или путь по умолчанию на chrome://version/ URL-адресом

в моем случае это /Users/mikhail/Library/Application Support/Google/Chrome/Default

по какой-то причине правильным путем будет эта строка без последней части " / Default путь:

require 'watir-webdriver'

username = ENV['USER'] #or just your name
switches = %W[--user-data-dir=/Users/#{username}/Library/Application\ Support/Google/Chrome/]

browser = Watir::Browser.new :chrome, switches: switches
browser.goto 'google.com'

в этом случае вы сохраняете всю историю и установленные расширения.

или проще:

require 'watir-webdriver'

switches = %W[--user-data-dir=/some\ folder]
browser = Watir::Browser.new :chrome, switches: switches
browser.goto 'google.com'

в этом случае some folder должен существовать, и вы создадите новый профиль с нуля.