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);
        }    
  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/May-study/p/9798222.html
Copyright © 2011-2022 走看看