无法在Selenium Webdriver中设置cookie

Dav*_*d.M 16 java testing cookies selenium-webdriver microsoft-edge

我正在尝试在使用webdriver打开它之前添加cookie到链接,但它一直给我这个错误:

org.openqa.selenium.UnableToSetCookieException:无法设置cookie(警告:服务器未提供任何堆栈跟踪信息)

请在下面找到我的代码:

System.setProperty("webdriver.edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example
Run Code Online (Sandbox Code Playgroud)

请帮助解决相关问题.

Jef*_*ffC 21

您在导航到网站之前创建了cookie.如果您尝试在域www.example.com上创建cookie,那么您可能希望导航到该域上的某个页面,创建cookie,然后开始测试.

从我前面的阅读中,最好的方法是导航到您知道在域上不存在的某个页面,例如www.example.com/this404page,然后创建cookie.它应该加载更快,因为它是一个错误页面,不应包含太多内容.在404页面上创建cookie后,开始测试.


Nic*_*zza 9

您无法执行此操作,因为WebDriver规范要求您将浏览器登陆到您尝试为其设置Cookie的域.

解决方法和提到的是在设置cookie之前转到页面.但这会导致一些问题:

不幸的是,它阻止了两个关键用例:

  1. 您希望在新会话中重复使用来自其他Webdriver会话的Cookie,以避免重复获取Cookie所需的工作.比如不得不重复登录.
  2. 允许webdriver池在不相关的线程之间共享,其中每个线程可能有自己的cookie.

webdriver规范显然需要考虑到这一点.我在这里开了一个问题:

https://github.com/w3c/webdriver/issues/1238

给它一些投票.所有浏览器都应该开始有办法处理这个问题.


iam*_*p89 5

首先导航到URL,然后尝试添加cookie,请尝试以下代码:

System.setProperty("webdriver.edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example 
Run Code Online (Sandbox Code Playgroud)

用以下代码替换您的代码:

System.setProperty("webdriver.edge.driver","C:\\Program Files\\Latest Webdriver\\MicrosoftWebDrive.exe" );
EdgeDriver = new EdgeDriver();
Thread.sleep(2000);
EdgeDriver.get("https://www.google.ca/?gws_rd=ssl"); // The link is an example 
Cookie cookie = new Cookie("Testing", "11111");
EdgeDriver.manage().addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)


小智 2

在导航到域之前添加 cookie 称为无域 cookie,我认为这是不可能的。

我还没有找到在 url 之前删除 cookie 的方法,但我认为下面的场景可能会帮助你 -

  1. 创建工厂类来创建webdriver实例
  2. 在返回 webdriver 实例之前,导航到被测域上的任何页面,并删除 cookie,然后将浏览器导航回来。
  3. 您的测试现在可以开始,不知道导航和 cookie 删除已经发生