Как обращаться с файлами cookie в Selenium Вебдрайвер
⚡ Умное резюме
Файлы cookie хранят пользовательские предпочтения и идентификаторы сеанса в виде пар «ключ-значение», и Selenium WebDriver может считывать, сохранять и воспроизводить их, поэтому автоматизированный тест пропускает экран входа в систему при каждом последующем запуске.

HTTP-куки содержит информацию о пользователе и его предпочтениях. Он хранит информацию в виде пары «ключ-значение». Это небольшой фрагмент данных, отправляемый веб-приложением и сохраняемый в веб-браузере во время просмотра пользователем данного веб-сайта.
Если вы новичок в этой теме, начните с этого руководства. тестирование файлов cookie.
Selenium Команды запроса для файлов cookie
In Selenium В WebDriver мы можем запрашивать и взаимодействовать с файлами cookie, используя встроенные методы, описанные ниже. Доступ к каждому из них осуществляется через driver.manage(), который возвращает интерфейс Options.
| Selenium Команды запроса | Результат |
|---|---|
| driver.manage().getCookies(); | Возвращает список всех файлов cookie. |
| driver.manage().getCookieNamed(arg0); | Возвращает конкретный cookie-файл по имени. |
| driver.manage().addCookie(arg0); | Создает и добавляет cookie-файл. |
| driver.manage().deleteCookie(arg0); | Удаляет определенный cookie-файл. |
| driver.manage().deleteCookieNamed(arg0); | Удаляет определенный cookie-файл по имени. |
| driver.manage().deleteAllCookies(); | Удаляет все файлы cookie |
Зачем обрабатывать (принимать) файлы cookie в Selenium?
Каждый файл cookie связан с именем, значением, доменом, путем, сроком действия и статусом того, является ли он безопасным или нет. Чтобы проверить клиента, сервер анализирует все эти значения в файле cookie.
После появления тестов веб-приложение, использующее Selenium WebDriver, вам может потребоваться создать, обновить или удалить cookie-файл.
Например, при автоматизации интернет-магазина.ping В этом приложении вам может потребоваться автоматизировать тестовые сценарии, такие как размещение заказа, просмотр корзины, информация об оплате, подтверждение заказа и так далее.
Если файлы cookie не сохраняются, вам придется каждый раз выполнять вход в систему перед запуском описанных выше тестовых сценариев. Это увеличит трудозатраты на написание кода и время выполнения.
Решение заключается в хранении файлов cookie в файле. LaterПолучите значения cookie-файла из этого файла и добавьте их в текущую сессию браузера. В результате вы сможете пропустить этапы входа в систему в каждом браузере. прецедент потому что ваша сессия драйвера содержит эту информацию.
Теперь сервер приложений рассматривает вашу браузерную сессию как аутентифицированную и напрямую перенаправляет вас на запрошенный вами сайт. URL.
Как обращаться с файлами cookie в Selenium
Мы будем использовать https://demo.guru99.com/test/cookie/selenium_aut.php для нашей демонстрационной цели.
Это будет двухэтапный процесс.
Шаг 1) Войдите в приложение и сохраните сгенерированный аутентификационный cookie.
В демонстрационном приложении представлена простая форма авторизации, показанная ниже.
Шаг 2) Используйте сохраненный cookie-файл для повторного входа в приложение без использования идентификатора пользователя и пароля.
Шаг 1) Сохранение информации о файлах cookie
package CookieExample; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.Cookie; public class cookieRead{ public static void main(String[] args) { WebDriver driver; System.setProperty("webdriver.chrome.driver","G:///chromedriver.exe"); driver=new ChromeDriver(); driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php"); // Input Email id and Password If you are already Register driver.findElement(By.name("username")).sendKeys("abc123"); driver.findElement(By.name("password")).sendKeys("123xyz"); driver.findElement(By.name("submit")).click(); // create file named Cookies to store Login Information File file = new File("Cookies.data"); try { // Delete old file if exists file.delete(); file.createNewFile(); FileWriter fileWrite = new FileWriter(file); BufferedWriter Bwrite = new BufferedWriter(fileWrite); // loop for getting the cookie information // loop for getting the cookie information for(Cookie ck : driver.manage().getCookies()) { Bwrite.write((ck.getName()+";"+ck.getValue()+";"+ck.getDomain()+";"+ck.getPath()+";"+ck.getExpiry()+";"+ck.isSecure())); Bwrite.newLine(); } Bwrite.close(); fileWrite.close(); } catch(Exception ex) { ex.printStackTrace(); } } }
⚠️ Примечание к версии: Строка System.setProperty сохранена в точности так, как она была написана в оригинальном руководстве. Selenium 4.6 г. Selenium Менеджер автоматически загружает и настраивает соответствующий драйвер Chromedriver, поэтому эта строка больше не требуется в текущей конфигурации. Исходный код ниже оставлен без изменений и по-прежнему компилируется.
Code объяснение
- Создайте экземпляр WebDriver.
- Посетите веб-сайт, используя driver.get(“https://demo.guru99.com/test/cookie/selenium_aut.php”).
- Войдите в приложение.
- Прочтите информацию о файлах cookie, используя
driver.manage().getCookies();
- Сохраните информацию о файлах cookie с помощью файла.Writer класс для записи потоков символов, и BufferedWriter записать текст в файл с именем Cookies.data.
- Файл Cookies.data хранит всю информацию о файлах cookie, включая имя, значение, домен и путь. Мы можем получить эту информацию и войти в приложение без ввода учетных данных.
После выполнения приведенного выше кода в структуре папок проекта будет создан файл Cookies.data. Откройте этот файл, и вы увидите учетные данные для входа в тестируемое приложение, сохраненные в формате cookie, как показано на выделенном скриншоте ниже.
Шаг 2) Использование сохраненного файла cookie для входа в приложение.
Теперь мы получим доступ к cookie-файлу, сгенерированному на шаге 1, и используем его для аутентификации нашей сессии в приложении.
package CookieExample; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Date; import java.util.StringTokenizer; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class CookieWrite { public static void main(String[] args){ WebDriver driver; System.setProperty("webdriver.chrome.driver","G://chromedriver.exe"); driver=new ChromeDriver(); try{ File file = new File("Cookies.data"); FileReader fileReader = new FileReader(file); BufferedReader Buffreader = new BufferedReader(fileReader); String strline; while((strline=Buffreader.readLine())!=null){ StringTokenizer token = new StringTokenizer(strline,";"); while(token.hasMoreTokens()){ String name = token.nextToken(); String value = token.nextToken(); String domain = token.nextToken(); String path = token.nextToken(); Date expiry = null; String val; if(!(val=token.nextToken()).equals("null")) { expiry = new Date(val); } Boolean isSecure = new Boolean(token.nextToken()). booleanValue(); Cookie ck = new Cookie(name,value,domain,path,expiry,isSecure); System.out.println(ck); driver.manage().addCookie(ck); // This will add the stored cookie to your current session } } }catch(Exception ex){ ex.printStackTrace(); } driver.get("https://demo.guru99.com/test/cookie/selenium_aut.php"); } }
Результат: Вы сразу переходите на экран подтверждения успешного входа в систему, без ввода идентификатора пользователя и пароля.
ПРИМЕЧАНИЕ: Если после выполнения указанного выше скрипта вы увидите страницу входа в систему, обязательно обновите страницу.
⚠️ Java записки: В скрипте чтения используются методы `new Boolean(String)` и `new Date(String)`, которые в JDK давно устарели. В современной версии JDK эквивалентами являются `Boolean.parseBoolean(token.nextToken())` и парсер `java.time`. Оригинальные строки выше сохранены; рассматривайте примечание как современную замену, а не как редактирование.
Атрибуты файлов cookie и Selenium Мастер-класс по приготовлению печенья
Два приведенных выше скрипта перемещают шесть полей в файл и из файла. Эти поля — именно те, которые предоставляет класс org.openqa.selenium.Cookie, и знание их значительно упрощает чтение цикла токенизации на шаге 2.
| Атрибут | Аксессуар | Что это значит |
|---|---|---|
| Имя | GetName () | Ключ, который ищет сервер, например, JSESSIONID. |
| Значение | GetValue () | Сохраненные данные, обычно идентификатор сессии. |
| Домен | GetDomain () | Хост, которому браузер отправит обратно cookie-файл. |
| Тропа | GetPath () | URL префикс, к которому применяется cookie-файл. |
| окончание | получить срок действия () | Дата истечения срока действия cookie-файла. Значение null означает, что это сессионный cookie-файл. |
| Безопасный | isSecure() | Возвращает true, если cookie-файл отправляется только по протоколу HTTPS. |
| HttpOnly | isHttpOnly() | Верно, когда JavaСкрипт на странице не может прочитать cookie-файл. |
| СамСайт | getSameSite() | Строгий, мягкий или без ограничений. Добавлено в Selenium 4. |
Вместо конструктора с шестью аргументами, использованного на шаге 2, в текущем коде обычно создается cookie через внутренний класс Builder, что позволяет устанавливать только те поля, которые вас интересуют.
Cookie sessionCookie = new Cookie.Builder("JSESSIONID", "A1B2C3D4") .domain("demo.guru99.com") .path("/") .isSecure(true) .isHttpOnly(true) .build(); driver.manage().addCookie(sessionCookie);
Одно правило часто ставит людей в тупик: объект cookie нельзя редактировать после его создания. Чтобы изменить значение, нужно удалить старый cookie и создать новую копию, поэтому Builder так полезен.
Cookie original = driver.manage().getCookieNamed("JSESSIONID"); driver.manage().deleteCookie(original); Cookie updated = new Cookie.Builder(original.getName(), "NEW-VALUE") .domain(original.getDomain()) .path(original.getPath()) .isSecure(original.isSecure()) .build(); driver.manage().addCookie(updated);
Распространенные ошибки при работе с файлами cookie Selenium WebDrivers и как их исправить
В коде cookie обычно возникают сбои по нескольким предсказуемым причинам. В таблице ниже перечислены наиболее часто встречающиеся из них, а также их причины и способы устранения.
| Симптом | Вызывать | фиксированный |
|---|---|---|
| InvalidCookieDomainException | Функция addCookie была вызвана до перехода на сайт, поэтому браузер по-прежнему находится в состоянии about:blank. | Сначала вызовите метод driver.get для целевого домена, затем добавьте cookie. |
| UnableToSetCookieException | Домен cookie-файла не соответствует текущей загруженной странице. | Удалите поле домена или укажите точный хост открываемой страницы. |
| Страница входа в систему по-прежнему отображается после добавления cookie. | Страница была отрисована до того, как файл cookie был создан. | Вызовите метод driver.navigate().refresh(), что и подразумевается в примечании выше под принудительным обновлением страницы. |
| getCookieNamed возвращает null | Название написано с ошибкой, или cookie-файл относится к другому пути или поддомену. | С помощью функции getCookies получить все файлы cookie и сравнить их имена. |
| Сохраненный cookie-файл отклоняется при последующем запуске. | Срок действия истек или сервер завершил сессию. | Для повторного выполнения шага 1 сгенерируйте файл Cookies.data заново. |
Если браузер открывается и проходит аутентификацию корректно, но после этого скрипт завершается с ошибкой, то, вероятно, проблема не в cookie. Необходимо разобраться в проблеме. обработка исключений в Selenium оттуда — более быстрый маршрут, и для него есть специально оборудованная дорога. Firefox профиль Это обычная альтернатива, когда необходимо сохранить данные сессии без использования файла.


