使用cookie實現自動化測試中的自動登錄


  本文將詳細介紹如何利用cookie,在自動化測試時實現自動登錄功能。

  我們將步驟主要分為以下幾步:

  1. 在基類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);
    }    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM