无法在 Selenium Webdriver 中设置 Cookie

我试图在用网络驱动程序打开链接之前将cookie添加到链接中,但它一直给我这个错误:

org.openqa.selenium.UnableToSetCookieException: 無法設定 cookie (警告: 伺服器未提供任何 stacktrace 信息)

请在下面找到我的代码:

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

请提供相关解决方案。


答案 1

您正在导航到网站之前创建 Cookie。如果您尝试在域 www.example.com 创建 Cookie,则需要导航到该域上的某个页面,创建该 Cookie,然后开始测试。

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


答案 2

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

如上所述的解决方法是在设置 Cookie 之前转到该页面。但这会导致一些问题:

不幸的是,这阻止了2个关键用例:

  1. 您希望在新会话中重用来自另一个 Webdriver 会话的 Cookie,以避免重复获取 Cookie 所需的工作。例如必须重复登录。
  2. 允许在不相关的线程之间共享 Webdriver 池,其中每个线程可能都有自己的 Cookie。

网络驱动程序规范显然需要考虑这一点。我在这里打开了一个问题:

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

给它一些投票。所有浏览器都应该开始携带一种方法来处理这个问题。


推荐