Но не тут-то было, здесь вываливается ошибка
org.openqa.selenium.InvalidCookieDomainException: You may only set cookies for the current domain
В интернетах есть решение, модифицировать парочку файлов в firefox, либо открывать страницу, потом добавить куки и уже перейти куда надо (и это работает):
Конечно, куки нельзя поставить, не находясь на домене. Можете сами попробовать открыть http://google.com и попробовать посмотреть-поменять куки от http://yandex.ru (если конечно не пользоваться хитрыми аддонами, которые меняют кукисы на домене напрямую через файлы локальных баз)
По опыту работы с http-запросами, я могу послать запрос с заранее заданными заголовками, в том числе и куки, вопрос о том, будут ли они обработаны на той стороне - не относится к данной проблеме.
Не совсем понятно, как связаны google и yandex в данном контексте, я упоминал, что нахожусь на mainPage, логинюсь, далее закрываю браузер и открываю его, что бы проверить авторизует ли он меня по куке. Всё происходит в рамках одного домена, но в разных сессиях.
Я исходил из комментария Андрея Солнцева о том, что надо выставлять “ДО” запроса. Но так не поехало.
Ага, спасибо.
Но тут я опирался на комментарий разработчика из Selenide, думал, что они допилили это.
А если всё-таки очень хочется использовать куки, то выставлять их надо ДО запроса. То есть примерно так:
Cookie ck = new Cookie("4langcookie", "en");
WebDriverRunner.getWebDriver().manage().addCookie(ck);
open("http://www.test.com");
Andrei Solntsev
Вы сами ответили на свой вопрос. По канонам browser security куки сэтать и изменять можно только в пределах домена на котором находишься в данный момент. Единственное что можно делать вне данного домена, так это читать куки с других доменах при определенных настройках. CORS не позволяет шарить большинство приватных данных между доменами, что в принципе и логично.
Попробуй в консоли открыв сайт http://automated-testing.info/ поставить куку: document.cookie='test=123;domain=.automated-testing.info'
Поставится.
Теперь зайди на google.com и проверь что куки нет.
Суть в том что селениум не может сделать того, что в принципе нельзя (оговорка, потому что на самом деле можно, но не стандартными возможностями браузера).
У меня аналогия другая, если я руками это делаю, то это выглядит так: я открываю страницу, существующие куки подхватываются автоматически и на сайте я уже авторизован без дополнительных действий. Логично же.
Если я это делаю через Selenium, то мне нужно зайти на сайт, потом уже добавить куку и открыть страницу. Не вижу здесь “то, чего в принципе нельзя”.
Да, последовательность действий простая:
1- Открываю сайт
2- логинюсь
3- меня перенаправляет на дашборд (автоматически)
4- закрываю
5- открываю сайт
6- меня перенаправляет на дашборд (автоматически)
При работе с селениумом, мне надо между 5 и 6 пунктами добавить ещё парочку: “подключить куки” и переоткрыть сайт.
Если 4-5 делать в пределах одной и той же сессии, то не надо. То есть я бы предположил что это один тест. Если же все браузер все таки инициализируется заново, то да, прийдется открыть, поставить куки, и переоткрыть еще раз.
Вот я тоже так думал, но Selenide обрабатывает close() так, что куки не сохраняются и без них на сайт меня уже не пускает. В связи с этим и появился вопрос, что в рамках одного теста:
open(page)
close()
open(page)
открывает барузер, который не помнит меня. Закрывать пробовал и через WebDriverRunner.getWebDriver().close() и прочие варианты. Забывает напрочь. Приходится добавлять куки.
А вам не кажется, что вы перемудрили?
Этим тестов вы по сути проверяете не то, как работает ваше приложение, а то, что браузер посылает куки при закрытии и переоткрытии вкладки. Не?
Ну так я и говорю, вы по сути хотите проверить не работу вашего приложения, а работу браузера. Для приложения переоткрытие вкладки равносильно простому refresh.