介紹selenium操做cookie以前,先簡單介紹一下cookie的基礎知識javascript
cookie通常用來識別用戶身份和記錄用戶狀態,存儲在客戶端電腦上。IE的cookie文件路徑(win7):php
「C:\Users\用戶名\AppData\Roaming\Microsoft\Windows\Cookies」html
若是windows下沒有cookies文件夾,須要把隱藏受保護的系統文件夾前面的勾去掉;chrome的cookie路徑(win7):java
「C:\Users\用戶名\AppData\Local\Google\Chrome\User Data\Default\Cookies」web
IE把不一樣的cookie存儲爲不一樣的txt文件,因此每一個文件都較小,chrome是存儲在一個cookies文件中,該文件較大。chrome
能夠經過以下方式添加方式windows
<html> <head> <title>cookie演示</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script language="JavaScript" type="text/javascript"> function addCookie(){ var date=new Date(); var expiresDays=1; //將date設置爲1天之後的時間 date.setTime(date.getTime()+expiresDays*24*3600*1000); //name設置爲1天后過時 document.cookie="name=cookie;expires="+date.toGMTString(); } </script> </head> <body> <input type="button" onclick="addCookie()" value="增長cookie"> </body> </html>
IE瀏覽器會在上述文件夾下生成一個txt文件,內容即爲剛纔的鍵值對瀏覽器
chrome瀏覽器能夠直接查看cookie,地址欄輸入chrome://settings/content便可,注意過時時間是一天之後緩存
想要獲取cookie也很簡單,把賦值語句倒過來寫便可cookie
<html> <head> <title>cookie演示</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script language="JavaScript" type="text/javascript"> function addCookie(){ var date=new Date(); var expiresDays=1; //將date設置爲1天之前的時間便可刪除此cookie date.setTime(date.getTime()-expiresDays*24*3600*1000); //name設置爲1天后過時 document.cookie="name=cookie;expires="+date.toGMTString(); var str=document.cookie; //按等號分割字符串 var cookie=str.split("="); alert("cookie "+cookie[0]+"的值爲"+cookie[1]); } </script> </head> <body> <input type="button" onclick="addCookie()" value="增長cookie"> </body> </html>
有兩種方法能夠得到cookie,第一種是直接經過cookie名稱來獲取
import java.util.Set; 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; public class NewTest{ public static void main(String[] args) throws InterruptedException { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://localhost/cookie.html"); //這兩句不能省略 WebElement element=driver.findElement(By.xpath("//input[@id='1']")); element.click(); System.out.println(driver.manage().getCookieNamed("name")); Thread.sleep(3000); driver.quit(); } }
輸出以下
和咱們在頁面中添加的cookie是同樣的,第二種是經過selenium提供的Cookie類獲取,接口中有云:
import java.util.Set; 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; public class NewTest{ public static void main(String[] args) throws InterruptedException { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://localhost/cookie.html"); //這兩句不能省略 WebElement element=driver.findElement(By.xpath("//input[@id='1']")); element.click(); Set<Cookie> cookies=driver.manage().getCookies(); System.out.println("cookie總數爲"+cookies.size()); for(Cookie cookie:cookies) System.out.println("做用域:"+cookie.getDomain()+", 名稱:"+cookie.getName()+ ", 值:"+cookie.getValue()+", 範圍:"+cookie.getPath()+ ", 過時時間"+cookie.getExpiry()); Thread.sleep(3000); driver.quit(); } }
輸出大概是這樣子
添加cookie就很簡單了
import java.util.Set; 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; public class NewTest{ public static void main(String[] args) throws InterruptedException { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://localhost/cookie.html"); //這兩句不能省略 WebElement element=driver.findElement(By.xpath("//input[@id='1']")); element.click(); Cookie cookie=new Cookie("java","eclipse","/",null); driver.manage().addCookie(cookie); System.out.println(driver.manage().getCookieNamed("java")); Thread.sleep(3000); driver.quit(); } }
能夠看到,咱們先是生成了一個cookie實例,而後經過addCookie方法添加cookie.參數的含義能夠在cookie類的定義中找到,位於org.openqa.selenium.Cookie,下面是其中的一個
有三種途徑:
deleteAllCookies 刪除全部cookie
deleteCookie 刪除指定的cookie,參數一個cookie對象
deleteCookieNamed 根據cookie名稱刪除
import java.util.Set; 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; public class NewTest{ public static void main(String[] args) throws InterruptedException { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://localhost/cookie.html"); //這兩句不能省略 WebElement element=driver.findElement(By.xpath("//input[@id='1']")); element.click(); Cookie cookie=new Cookie("java","eclipse","/",null); driver.manage().addCookie(cookie); //刪除名稱爲value的cookie driver.manage().deleteCookieNamed("value"); //刪除剛纔新增的cookie java driver.manage().deleteCookie(cookie); //輸出現有cookie Set<Cookie> cks=driver.manage().getCookies(); System.out.println("cookie總數爲"+cks.size()); for(Cookie ck:cks) System.out.println("做用域:"+ck.getDomain()+", 名稱:"+ck.getName()+ ", 值:"+ck.getValue()+", 範圍:"+ck.getPath()+ ", 過時時間"+ck.getExpiry()); //刪除所有cookie driver.manage().deleteAllCookies(); Set<Cookie> c=driver.manage().getCookies(); System.out.println("cookie總數爲"+c.size()); Thread.sleep(3000); driver.quit(); } }
說了這麼多,selenium來操做cookie到底有什麼用呢?主要有兩點:
1.測試web程序常常須要清楚瀏覽器緩存,以消除不一樣版本的影響,selenium就能夠自動執行了,每次測試新版本前先清楚緩存文件
2.用來完成自動登錄的功能,無需再編寫登陸的公共方法了
如今有兩個頁面cookie.php爲登陸頁面,login.php是登錄後跳轉的頁面,若是用戶已經登陸即已有用戶的cookie就自動跳轉到login.php.
cookie.php:
<html> <head> <title>cookie演示</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php if(isset($_COOKIE["username"])){ echo "<script language='javascript' type='text/javascript'>"; echo "window.location.href='login.php'"; echo "</script>"; } ?> <form action="login.php" method="post"> <span>用戶名:</span><input type="text" name="username" > <br> <span>密 碼:</span><input type="password" name="password"> <br> <input type="submit" name="submit" value="提交" onclick="addCookie()"> </form> </body> </html>login.php:
<?php setcookie("username",$_POST["username"]); setcookie("password",$_POST["password"]); if(isset($_COOKIE["username"])) echo $_COOKIE["username"]; else echo $_POST["username"]; ?>能夠這樣寫selenium,就能夠用用戶eclipse自動登陸了(忽略了密碼驗證)
import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class NewTest{ public static void main(String[] args) throws InterruptedException { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://localhost/cookie.php"); driver.manage().deleteAllCookies(); Cookie cookie=new Cookie("username","eclipse","/",null); driver.manage().addCookie(cookie); Cookie cookie1=new Cookie("password","123@qq.com","/",null); driver.manage().addCookie(cookie1); driver.get("http://localhost/cookie.php"); Thread.sleep(3000); driver.quit(); } }