selenium如何操作cookies實現免登錄


執行接口測試或者某些自動化測試時,為了避免每次訪問接口都需要登錄操作,可以用訪問接口時,把cookies信息傳過去。

思路是先登錄一次頁面,獲取到cookies信息,把cookies信息保存到本地文件,以后再訪問頁面時直接拿本地的cookies文件傳過去

package com.gmsd;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
import java.util.StringTokenizer;

import org.openqa.selenium.By;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

/** 
 * @author QiaoJiaofei 
 * @version 創建時間:2015年7月2日 上午10:29:54 
 * 類說明 
 */
public class TestCookie {
	
	WebDriver dr = null;
	
	public static void main(String args[]) {
		
		TestCookie t = new TestCookie();
		t.wtriteC();
		t.getC();
	}
	public void wtriteC() {
		System.setProperty("webdriver.chrome.driver", "D:/BaiduYunDownload/selenium/chromedriver.exe");
		dr = new ChromeDriver();
		dr.get("http://172.16.30.209:5555/login.shtml");
		
		dr.findElement(By.id("inputEmail")).sendKeys("18600363820");
		dr.findElement(By.id("inputPassword")).sendKeys("123456");
		dr.findElement(By.id("denglu")).click();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		
		File file = new File("D:/JavaTestFile/TestCookies.txt");
				
		Set<Cookie> s = dr.manage().getCookies();
		
		
		if(file.exists()) {
			file.delete();
			try {
				file.createNewFile();

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		try {
			FileWriter fw = new FileWriter(file);
			BufferedWriter bw = new BufferedWriter(fw);
			for(Cookie c:s) {
				bw.write(c.getDomain()+";"+c.getName()+";"+c.getValue()+";"+c.getPath()+";"+c.getExpiry()+";"+c.isSecure());
				bw.newLine();
			}
			bw.flush();	
			bw.close();
			fw.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		dr.quit();
	}
	public void getC() {	
		System.setProperty("webdriver.chrome.driver", "D:/BaiduYunDownload/selenium/chromedriver.exe");
		dr = new ChromeDriver();
		dr.get("http://172.16.30.209:5555");
		File file = new File("D:/JavaTestFile/TestCookies.txt");
		try {
			FileReader fr = new FileReader(file);
			BufferedReader br = new BufferedReader(fr);
			String line = null;
			while((line=br.readLine())!=null) {
			
				
				String [] sz = line.split(";");
				String doman = 	sz[0].trim();
				String name = sz[1].trim();
				String value = sz[2].trim();
				String path = sz[3].trim();
				Date date = null;

				if(!(sz[4].equals("null"))){	
					date = new Date(sz[4]);
					//System.out.println("date="+date);

				}
				Boolean bl = Boolean.valueOf(sz[5]);
			
				
				Cookie ck = new Cookie(name,value,doman,path,date,bl); 
				dr.manage().addCookie(ck);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		dr.get("http://172.16.30.209:5555");
		//dr.quit();
	}
}

  

writerC()方法是獲取cookies並存到本地文件,主要使用selenium的Set<Cookie> s = dr.manage().getCookies();
getC()方法是從本地文件讀取cookies信息,主要使用

Cookie ck = new Cookie(name,value,doman,path,date,bl);
dr.manage().addCookie(ck);

注意幾點:

1、Cookie的構造方法的參數是有順序的

2、getC()調用了兩次url,第一次是往url傳cookies,第二次是為了刷新,也可使用dr.navigate().refresh();


免責聲明!

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



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