Selenium WebDriver 处理cookie

在使用webdriver测试中,很多地方都使用登陆,cookie能够实现不必再次输入用户名密码进行登陆。

首先了解一下Java Cookie类的一些方法。

在jsp中处理cookie数据的常用方法:

getDomain();返回cookie的域名.

getMaxAge();返回cookie的存活时间

getName();返回cookie的名字

getPath();返回cookie适用的路径

getSecure();如果浏览器通过安全协议发送Cookie将返回true值,如果浏览器使用标准协议刚返回false值

getValue();返回cookie的值

getVersion();返回cookie所遵从的协议版本setComment(String purpose);设置cookie的注释

setPath(String url);设置Cookie的适用路径

setSecure(Boolean flag);设置浏览器是否仅仅使用安全协议来发送cookie,例如使用Https或ssl

setValue(String newvalue);cookie创建后设置一个新的值

setVersion(int v);设置cookie所遵从的协议版本

selenium WebDriver 通过driver.manage().getCookies() 和driver.manage().addCookie(ck); 获取cookie 加载cookie

首先,获取cookie 保存的browser.data内

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.Cookie;

public class Cookies {
    public static void main(String[] args) {

        WebDriver driver=DriverFactory.create();
        driver.get("http://selenium.jd-app.com/wp-login.php");
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        WebElement user = driver.findElement(By.xpath("//*[@id=‘user_login‘]"));
        user.clear();
        user.sendKeys("username");
        WebElement password = driver.findElement(By
                .xpath("//*[@id=‘user_pass‘]"));
        password.clear();
        password.sendKeys("password");

         WebElement submit=driver.findElement(By.xpath("//*[@id=‘wp-submit‘]"));
            submit.submit();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        File file=new File("broswer.data");
        try
        {
            //delete file if exists
            file.delete();
            file.createNewFile();
            FileWriter fw=new FileWriter(file);
            BufferedWriter bw=new BufferedWriter(fw);
            for(Cookie ck:driver.manage().getCookies())
            {
                bw.write(ck.getName()+";"+ck.getValue()+";"+ck.getDomain()+";"+ck.getPath()+";"+ck.getExpiry()+";"+ck.isSecure());
                bw.newLine();
            }
            bw.flush();
            bw.close();
            fw.close();

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            System.out.println("cookie write to file");
        }
    }
}

这里,我简单封装了chrome webdriver

import java.util.Arrays;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;

public class DriverFactory {

    public static WebDriver create() {

        // TODO Auto-generated method stub
        String chromdriver="E:\\chromedriver.exe";
        System.setProperty("webdriver.chrome.driver", chromdriver);
        ChromeOptions options = new ChromeOptions();

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability("chrome.switches",
                Arrays.asList("--start-maximized"));
        options.addArguments("--test-type", "--start-maximized");
        WebDriver driver=new ChromeDriver(options);
        return driver;
    }

}

接下来 ,读取browser.data,生成cookie  把cookie加载到浏览器

import java.io.BufferedReader;

import java.io.File;
import java.io.FileReader;

import java.util.Date;
import java.util.StringTokenizer;

import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;

public class UseCookieLogin {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        WebDriver driver=DriverFactory.create();
        driver.get("http://selenium.jd-app.com/wp-admin/");
        try
        {
            File file=new File("broswer.data");
            FileReader fr=new FileReader(file);
            BufferedReader br=new BufferedReader(fr);
            String line;
            while((line=br.readLine())!= null)
            {
                StringTokenizer str=new StringTokenizer(line,";");
                while(str.hasMoreTokens())
                {
                    String name=str.nextToken();
                    String value=str.nextToken();
                    String domain=str.nextToken();
                    String path=str.nextToken();
                    Date expiry=null;
                    String dt;
                    if(!(dt=str.nextToken()).equals(null))
                    {
                        //expiry=new Date(dt);
                        System.out.println();
                    }
                    boolean isSecure=new Boolean(str.nextToken()).booleanValue();
                    Cookie ck=new Cookie(name,value,domain,path,expiry,isSecure);
                    driver.manage().addCookie(ck);
                }
            }

        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        driver.get("http://selenium.jd-app.com/wp-admin/");
    }

}

管理页面只有登陆后才能打开,如果未登录就会跳转登陆页面,当我们加载cookie后,看到的是登陆后的页面

时间: 2024-10-12 15:24:17

Selenium WebDriver 处理cookie的相关文章

selenium webdriver处理浏览器Cookie

有时候我们需要验证浏览器中是否存在某个cookie,因为基于真实的cookie 的测试是无法通过白盒和集成测试完成的.WebDriver 提供了操作Cookie 的相关方法可以读取.添加和删除cookie 信息.WebDriver 操作cookie 的方法有:? getCookies() 获得所有cookie 信息? addCookie(cookie_dict) 添加cookie,必须有name 和value 值? deleteAllCookies() 删除所有cookie 信息? delete

selenium - webdriver - cookie操作

WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息. WebDriver操作cookie的方法: get_cookies(): 获得所有cookie信息. get_cookie(name): 返回字典的key为"name"的cookie信息. add_cookie(cookie_dict) : 添加cookie."cookie_dict"指字典对象,必须有name 和value 值. delete_cookie(name,opt

selenium WebDriver 截取网站的验证码

在做爬虫项目的时候,有时候会遇到验证码的问题,由于某些网站的验证码是动态生成的,即使是同一个链接,在不同的时间访问可能产生不同的验证码, 一 刚开始的思路就是打开这个验证码的链接,然后通过java代码get请求保存验证码图片到本地,然后用打码工具解析验证码,将验证码自动输入验证框就 可以把验证码的问题解决了,但是问题来,每次的请求同一个地址,产生的验证码图片是不一样的,所以这种方法行不通.所以只能将图片先用selenium  WebDriver 截取到本地,然后用打码工具解析ok ,自动填写验证

selenium webdriver学习(九)------------如何操作cookies(转)

selenium webdriver学习(九)------------如何操作cookies 博客分类: Selenium-webdriver Web 测试中我们经常会接触到Cookies,一个Cookies主要属性有”所在域.name.value.有效日期和路径",下面来讲一下怎么操作Cookies. Java代码   import java.util.Set; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebD

Selenium WebDriver高级用法

Selenium GitHub地址 选择合适的WebDrvier WebDriver是一个接口,它有几种实现,分别是HtmlUnitDrvier.FirefoxDriver.InternetExplorerDriver.ChromeDriver.OperaDriver,除了 InternetExplorerDriver只能在Windows平台运行,其他WebDriver均能跨平台. 如果追求运行速度,HtmlUnitDriver是首选,但是它没有运行界面,不能实时看到运行效果.如果想看到运行效果

Selenium Webdriver 学习总结-Advanced Usage-Cookie、Profile(七)

QQ群:136924235 论坛:http://bbs.shareku.com 一.如何使用Cookie代码示例: import org.openqa.selenium.Cookie; mport org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; import java.util.Set; public class

[乐意黎原创] 使用Selenium webdriver+Firefox浏览器来登录新浪微博

有个需求测试,需要用webdriver 登录到新浪微博,由于个人比较善长 Webdriver,于是采取了Webdriver+FireFox来实现. 配置环境 a. 必须首先在Eclipse里加载 selenium webdriver 包[[此处我导入的是 selenium-server-standalone-2.45.0.jar] b. 以及安装了 firefox 浏览器. 此篇文章中我用了本人的新浪微博地址来做测试,大家 可以更换为自己的新浪微博帐号和密码. 文中为部分主要的Java 代码.

selenium webdriver (python)大全

webdriver的简介 硒2.0的主要新功能是集成的webdriver的API.webdriver的设计除了解决一些seleniumr-RC API的一些限制,与webdriver 的整合,将提供一个更简单,更简洁的编程接口.selenium webdriver会更好地支持动态的网页,页面本身被重新加载页面元素可能更改.webdriver的目标是提供一个设计良好的面向对象的API,提供了更好的支持现代先进的web-app测试. WebDriver与Selenium-RC相比,是如何来驱动浏览器

Python Selenium Webdriver常用方法总结

常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: maximize_window() 设置窗口参数:set_window_size(600,800) 后退到前一页: back() 前进到后一页: forward() 刷新页面: refresh() 元素定位: id定位:find_element_by_id() name定位:find_element_by_name() class定位:find_element_b