繁体   English   中英

如何将Cookie从HttpURLConnection传递到Java中的WebDriver?

[英]How do I pass cookies from an HttpURLConnection to WebDriver in Java?

我正在测试一个需要一些基本身份验证的网站。 成功登录后,会话密钥将以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相同的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的当前域为空。 我通过在检索会话cookie并将其添加到driver之前仅将driver发送到ROOT_URLROOT_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");  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM