我正在测试一个需要一些基本身份验证的网站。成功登录后,会话密钥将以cookie形式发回。我已经编写了一些代码来通过Web服务获取此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()
方法,但它返回了相同的错误。有什么可能导致它抱怨吗?
答案 0 :(得分:0)
要将Cookie添加到WebDriver实例,Cookie中的域必须与WebDriver实例的当前域匹配。我试图在driver
访问任何内容之前添加Cookie,因此driver
的当前域为空。我在检索会话Cookie并将其添加到driver
之前,只需将ROOT_URL
发送到driver
即可修复它:
//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");