8

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

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

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

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

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

Если кто-нибудь может мне помочь, был бы признателен.

+0

Пожалуйста, поделитесь соответствующим кодом. –

+1

Это звучит как проблема с webdriver-chromedriver. Watir-webdriver вертится на вершине, а создание сеанса браузера и т. Д. Полностью зависит от webdriver. Я собираюсь ответить на вопрос соответствующим образом. –

ответ

3

Ну, хорошая новость, я придумал решение. Я хотел бы поделиться им, если кто-нибудь еще найдет меня в этой обуви с этой проблемой. Мои искренние извинения перед теми, кто у вас есть.

Мое окончательное решение было следующим:

  1. Создать профиль Firefox специально для применения
  2. Установить Firefox для "восстановления системы Windows & Вкладки". Это не сработало (что-то с Watir/Selenium) и просто игнорирует настройки, даже если Firefox распознал их.
  3. Для устранения вышеуказанной проблемы, я нашел user.js файл в селеном, редактируются параметры для «Восстановление Windows, & Вкладки» вручную в этом файле, и вставить файл через один в директории моего Firefox АНКЕТЫ (~/.mozilla/светлячок/*).
  4. Firefox заменяет предпочтения в prefs.js с номерами в user.js на каждом прогоне. Это фиксировало это.

Отметьте, что мне нужно было на самом деле настроить немного кода в selenium-webdriver, чтобы все это выполнялось плавно. watir-webdriver сидит поверх selenium-webdriver.

+0

Рад слышать, что вы нашли способ выполнить то, что вам нужно. –

+1

Прошло немало времени, Чак. Я хотел еще раз поблагодарить вас за ваш ответ. Это был прекрасный ответ, и вы были совершенно правы, когда это было по дизайну. Мне кажется, что проектов с открытым исходным кодом больше нет в духе тех вещей, которые я пытаюсь сделать. Мне просто кажется сумасшедшим, с объемом таких вопросов по сети. Во всяком случае, просто хотел сообщить, что вас ценят. Благодаря! –

3

Я считаю, что по дизайну webdriver всегда запускает сеансы с чистым слайд-печеньем.

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

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

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

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

Я хотел бы попробовать, что с помощью IRB и посмотреть, что вы получите

+0

Большое спасибо за комментарий. Я действительно пробовал это, когда пришел сюда, и искал другое решение. Я подумал: «Почему бы просто не найти способ использовать встроенную способность Firefox для сохранения сеанса между закрытием»? Проверьте мой ответ здесь для получения более подробной информации. –

2

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

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

В моем случае это /Users/mikhail/Library/Application Support/Google/Chrome/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 должен существовать, и вы будете создавать новый профиль с нуля.

 Смежные вопросы

  • Нет связанных вопросов^_^