使用cookie实现自动化测试中的自动登录
本文将详细介绍如何利用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); }