无法删除特定的命名cookie(Selenium WebDriver,C#,Chrome)

时间:2018-05-31 16:25:56

标签: google-chrome selenium cookies named

我的一些测试使用DeleteCookies方法执行此操作:

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

直到今天,当其中一项测试使应用程序出现异常时,这一点非常棒:

  

所需的防伪cookie" __ RequestVerificationToken"不存在。

所以我决定删除有问题的特定cookie,而不是全部:

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

未删除指定的Cookie。

要验证DeleteCookieNamed实际上是否正常工作,我删除了应用程序创建的其他两个Cookie,并且它有效。

当用户登录时,应用程序会将cookie的名称设置为其用户名(在本例中为user@user.com)...但可能是由于URL编码,将@更改为%40。

删除的删除的Cookie不包含%40。

如果您无法删除名称中包含%40的Cookie,则DeleteAllCookies将无效。因此,我怀疑我的目标cookie具有依赖性,类似于外键约束在关系数据库中的工作方式,因此我需要在删除指定的cookie之前删除特定顺序中的一个或多个其他cookie。

粗略地浏览一下Google,向我提供了有关如何删除Chrome中的Cookie的说明,而不是Chrome删除Cookie的方式。喜悦。我今天已经没时间了,请你有任何见解吗?

3 个答案:

答案 0 :(得分:0)

我解决这个问题的方法是通过selenium创建cookie,然后我就能删除它。虽然不在cookie名称中使用@,但我确实发现它更容易。希望有所帮助。

答案 1 :(得分:0)

对于我的特定情况,这似乎是一种合适的解决方法 - 最后使用播放列表运行CanLogIn测试:

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

答案 2 :(得分:0)

使用 Chrome 开发者工具: 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 更新后升级库,因此使用上述代码可以更高效、更轻松。