Невозможно удалить определенный именованный файл cookie (Selenium WebDriver, C#, Chrome)

В ряде моих тестов используется метод DeleteCookies, который делает следующее:

chromeDriver.Manage().Cookies.DeleteAllCookies();

Это было здорово до сегодняшнего дня, когда в одном из тестов приложение выдало исключение:

Требуемый файл cookie для защиты от подделки "__RequestVerificationToken" отсутствует.

Поэтому я решил удалить конкретный рассматриваемый файл cookie, а не все:

chromeDriver.Manage().Cookies.DeleteCookieNamed("user%40user.com");

Указанный файл cookie не был удален.

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

Когда пользователь входит в систему, приложение устанавливает имя файла cookie для своего имени пользователя (в данном случае [email protected]) ... но, предположительно, из-за кодирования URL-адреса, изменяет @ на %40.

Файлы cookie, которые удалены, не содержат %40.

Если бы вы не могли удалить файлы cookie, имя которых содержит %40, то DeleteAllCookies не сработала бы. Поэтому я подозреваю, что у моего целевого файла cookie есть зависимости, подобные тому, как ограничения внешнего ключа работают в реляционных базах данных, так что мне нужно удалить один или несколько других файлов cookie в определенном порядке, прежде чем я смогу удалить указанный.

Беглый взгляд на Google дает мне инструкции о том, как удалить файлы cookie в Chrome, а не о том, как Chrome удаляет файлы cookie. Радость. У меня сегодня мало времени, пожалуйста, у вас есть идеи?


person Zuno    schedule 31.05.2018    source источник
comment
Я не был полностью уверен, что %40 не имеет никакого отношения к этой проблеме, поэтому я установил файл cookie вручную с помощью символа @, и он был удален, когда я вызвал DeleteCookieNamed, и не удалился, когда я изменил символ @ обратно на %40. Это все еще не объясняет, почему DeleteAllCookies удаляет файл cookie с %40 в его имени, так что вот это. Возможно, есть какой-то способ учесть закодированные URL-адреса в именах файлов cookie при их удалении. У меня опять закончилось время, но я проверю.   -  person Zuno    schedule 01.06.2018


Ответы (3)


Когда я решил эту проблему, я создал файл cookie с помощью селена, а затем смог его удалить. Хотя мне было проще не использовать @ в именах файлов cookie. Надеюсь, это поможет.

person lardymonkey    schedule 01.06.2018
comment
Мои тесты требуют, чтобы я создавал файл cookie как через приложение, так и через Selenium. У меня есть тест CanLogIn, который имитирует вход пользователя в систему через соответствующие элементы ввода, который создает файл cookie с именем, содержащим %40, и это точка, в которой другие тесты (которые должны удалить указанный файл cookie) падают. - person Zuno; 04.06.2018

Это кажется подходящим обходным путем для моей конкретной ситуации - запустите тест CanLogIn последним, используя список воспроизведения:

https://stackoverflow.com/a/29039261/1875540

person Zuno    schedule 04.06.2018
comment
Через день плейлист забыл порядок добавления тестов. Это якобы можно решить, отредактировав файл .playlist и переместив соответствующий тег теста в конец списка, но у меня это не сработало. Вздох. - person Zuno; 05.06.2018

Используйте Chrome DevTools: https://chromedevtools.github.io/devtools-protocol/tot/Network/#method-deleteCookies

Код будет таким:

  ChromeDriver driver;


  var parameters = new Dictionary<string, object> 
  {
                ["name"] = "user%40user.com";
  };
  driver.ExecuteChromeCommand("Network.deleteCookies", parameters);

Вы также можете сделать это с помощью Selenium DevTools. Но поскольку у них есть некоторые проблемы с интеграциями, и вам может потребоваться обновлять библиотеку после каждого обновления Google, использование приведенного выше кода может быть более эффективным и простым.

person Y sharifpour    schedule 24.01.2021