java - 如何在 Java 中将 cookie 从 HttpURLConnection 传递到 WebDriver?

标签 java http selenium cookies selenium-webdriver

我正在测试一个需要一些基本身份验证的网站。成功登录后, 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/

相关文章:

python - 如何使用python和selenium列出网站加载的所有js文件

java - pdfbox。如何获取各种pdf表单的字段

java - Hibernate 控制台应用程序中的异常

swift - PFFile url 返回以 http 而不是 https 开头的 url

http - (弱)ETags 和 Last-Modified

java - 此版本的 ChromeDriver 尚未在 Chrome 版本 75 和打开新浏览器窗口后出现 java.lang.IllegalStateException 上进行测试

java - 如何通过命令行为jvm设置时区

java - 当 get 和 is 都存在时,JSTL EL 访问器翻译优先级?

json - 如何跟踪通过 elastic4s 客户端发送到 Elasticsearch 的 json 请求?

java - 有关如何将数据键入移动应用程序的盒装空间的建议