本文將詳細介紹如何利用cookie,在自動化測試時實現自動登錄功能。
我們將步驟主要分為以下幾步:
- 在基類BaseDriver中封裝讀、寫cookie的方法(主要看最后兩個方法);
package com.hizuche.base; import org.openqa.selenium.By; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import java.util.Set; /** * @author hp * @date 2018/9/20 15:40 * BaseDriver類,定義了帶參的構造方法,selectDriver方法,根據傳入的參數對瀏覽器進行選擇,並定義瀏覽器初始化、關閉等 */ public class BaseDriver { private WebDriver driver; public BaseDriver(String browser) { this.driver = selectDriver(browser); } /** * 根據傳入的字符串,選擇瀏覽器 * @param browser_1 傳入的瀏覽器名稱 * @return 返還具體的瀏覽器驅動 */ public WebDriver selectDriver(String browser_1) { if (browser_1.equalsIgnoreCase("firefox")) { return new FirefoxDriver(); } else if (browser_1.equalsIgnoreCase("chrome")) { System.setProperty("webdriver.chrome.driver", "E:\\selenium\\drivers\\chromedriver.exe"); return new ChromeDriver(); } return null; } /** * 因為在BasePage中調用的是BaseDriver類,而不是WebDriver,因此要在此類中單獨定義該方法 * @param elementLocate 傳入具體的定位方法 * @return */ public WebElement findElement(By elementLocate) { WebElement element = driver.findElement(elementLocate); return element; } /** * 為BaseDriver類定義get方法 * @param url 輸入的網址 */ public void get(String url){ driver.get(url); } /** * 為BaseDriver定義瀏覽器關閉操作 */ public void close(){ driver.close(); } /** * 在瀏覽器驅動中添加cookie * @param cookie 傳入的cookie值 */ public void setCookie(Cookie cookie){ driver.manage().addCookie(cookie); } /** * 獲取已有的cookie * @return 返回獲取到的cookie值 */ public Set<Cookie> getCookie() { Set<Cookie> cookies = driver.manage().getCookies(); return cookies; } }
2.創建一個HandleCookie類,主要用戶操作cookie,在該步驟,我們默認對應路徑下已有配置文件Cookie.properties,並且已經保存了cookie的鍵和值:
package com.hizuche.util; import com.hizuche.base.BaseDriver; import org.openqa.selenium.Cookie; import java.util.Set; /** * @Author hp * @Description: 用於操作配置文件中的Cookie信息 * @date: Create in 2018/10/16 9:46 */ public class HandleCookie { public BaseDriver driver; public ReadProperties properties1; /** * 創建一個帶參的HandleCookie構造函數 * @param driver 傳入瀏覽器驅動 */ public HandleCookie(BaseDriver driver) { this.driver = driver; properties1 = new ReadProperties("E:\\SeleniumTestcase\\02snow\\SNOW\\src\\Cookie.properties"); } /** * 瀏覽器打開網頁后,將網頁上的cookie值設置給瀏覽器驅動driver */ public void setCookies() { String value = properties1.getProperty("BAIDUID");
//創建一個Cookie對象,將cookie名稱,值,作用域等傳進去 Cookie cookie = new Cookie("BAIDUID", value, "baidu.com", "/", null);
//將創建的cookie配置給瀏覽器驅動driver driver.setCookie(cookie); } /** * 檢索配置文件中是否存在該鍵名,如果有,則將獲取到的cookie寫入 */ public void writeCookies() { Set<Cookie> cookies = driver.getCookie(); for (Cookie cookie:cookies) { if (cookie.getName().equals("BAIDUID")) { properties1.writeProperty(cookie.getName(), cookie.getValue()); } } } }
3.在測試用戶登錄的testcase中,登錄完成后執行寫入cookie的方法,使其記錄下這一次的用戶cookie信息;
if (loginAssert.assertLogin(username)) { System.out.println(username + "登錄成功!"); handleCookie.writeCookies(); //登錄成功后寫入當前cookie信息 } else { System.out.println(username + "當前用戶信息與登錄用戶不符合!"); }
4.將步驟3中獲取到的cookie信息傳給driver,這樣在driver打開對應的頁面中,頁面會在cookie的作用下,默認其為已登錄狀態,直接跳轉至登錄后的頁面;
@BeforeClass public void beforeClass() throws InterruptedException { this.driver = InitialDriver("chrome"); //將瀏覽器驅動傳給構造函數 handleCookie = new HandleCookie(driver); driver.get("http://www.baidu.com"); //將步驟3中獲取到的cookie值設置給瀏覽器驅動,以跳過登錄驗證 handleCookie.setCookies(); driver.get("http://www.baidu.com"); Thread.sleep(3000); }