使用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);
    }    

 

posted @ 2018-10-16 15:24  忘记木槿  阅读(1618)  评论(0编辑  收藏  举报