我正在测试一个需要一些基本身份验证的网站。成功登录后, session key 将在 cookie 中发回。我已经编写了一些代码来通过网络服务获取此 cookie。结局是这样的:
public List<HttpCookie> getCookies(String Domain, String user, String pass) {
// Actual services to log in here
List<HttpCookie> cookies = cookieStore.getCookies();
for (HttpCookie cookie : cookies) {
System.out.println(cookie);
}
return cookies;
}
当我调试时,我可以看到我的 sessionKey
其中包含有效值。它具有与我上面传递的相同的 domain
,以及一个像 /
这样的空白路径。
以下是我尝试将 cookie 添加到我的 WebDriver 实例的方法:
List<HttpCookie> cookies = getCookies(DOMAIN, USERNAME, PASSWORD);
for (HttpCookie cookie : cookies) {
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
String cookieDomain = cookie.getDomain();
String cookiePath = cookie.getPath();
Date cookieExpiry = new Date();
Cookie selCookie = new Cookie(cookieName, cookieValue, cookieDomain, cookiePath, cookieExpiry);
driver.manage().addCookie(selCookie);
}
driver.get(ROOT_URL+"/some/internal/page");
当我尝试添加 selCookie
时,收到以下错误消息:
org.openqa.selenium.InvalidCookieDomainException: You may only set cookies for the current domain
我直接从收到的 cookie 中复制域。我什至尝试将其作为裸字符串传递,而不是依赖 getDomain() 方法,但它返回了相同的错误。知道什么可能导致它提示吗?
最佳答案
要将 cookie 添加到 WebDriver 实例,cookie 中的域必须与 WebDriver 实例的当前域匹配。我试图在 driver
访问任何内容之前添加 cookie,因此 driver
的当前域为空。我通过在检索 session cookie 并将其添加到 driver
之前将 driver
发送到 ROOT_URL
来修复此问题:
//Added this:
driver.get(ROOT_URL);
List<HttpCookie> cookies = getCookies(DOMAIN, USERNAME, PASSWORD);
for (HttpCookie cookie : cookies) {
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
String cookieDomain = cookie.getDomain();
String cookiePath = cookie.getPath();
Date cookieExpiry = new Date();
Cookie selCookie = new Cookie(cookieName, cookieValue, cookieDomain, cookiePath, cookieExpiry);
driver.manage().addCookie(selCookie);
}
driver.get(ROOT_URL+"/some/internal/page");
关于java - 如何在 Java 中将 cookie 从 HttpURLConnection 传递到 WebDriver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25516285/