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
должен существовать, и вы создадите новый профиль с нуля.