zoukankan      html  css  js  c++  java
  • 使用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);
        }    
  • 相关阅读:
    TelephonyManager对黑名单的管理
    1125: 零起点学算法32——输出四位完全平方数
    1124: 零起点学算法31——开始新的起程
    1123: 零起点学算法30——参加程序设计竞赛
    1122: 零起点学算法29——等级分制度
    1121: 零起点学算法28——判断是否闰年
    1120: 零起点学算法27——判断是否直角三角形
    1119: 零起点学算法26——判断奇偶数
    1118: 零起点学算法25——求两点之间的距离
    1117: 零起点学算法24——求正弦和余弦
  • 原文地址:https://www.cnblogs.com/May-study/p/9798222.html
Copyright © 2011-2022 走看看