簡體   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