selenium webdriver(6)—cookie相關操做

介紹selenium操做cookie以前,先簡單介紹一下cookie的基礎知識javascript

 cookie                                                                                                                                                                   

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

iecookie

經過js操做cookie                                                                                                                                                       

能夠經過以下方式添加方式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文件,內容即爲剛纔的鍵值對瀏覽器

iecookie1

iecookie2

chrome瀏覽器能夠直接查看cookie,地址欄輸入chrome://settings/content便可,注意過時時間是一天之後緩存

chromecookie

想要獲取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,第一種是直接經過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();      
        }
}

輸出以下

selenium-cookie-name

和咱們在頁面中添加的cookie是同樣的,第二種是經過selenium提供的Cookie類獲取,接口中有云:

setcookies

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();      
        }
}

輸出大概是這樣子

selenium-cookie-name2

 添加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();
        
        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,下面是其中的一個

setcookies2

刪除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();      
        }
}
相關文章
相關標籤/搜索