selenium2java通过请求接口获取并向浏览器插入cookies

本人在使用selenium做测试的过程中,很多用例都是需要在登录状态下才能运行的,之前都是封装一个登录的方法,在学习了httpclient之后,想到一个通过请求登录接口来获取cookies值,再向浏览器插入cookies,使用户处于登录状态。分享代码,供大家参考。

下面是封装好的登录方法:

[html]  view plain  copy
  1. public void loginByApi() throws InterruptedException, NoSuchAlgorithmException, JSONException, IOException {  
  2.     ApiLibrary apiLibrary = new ApiLibrary(getUserName(), getUserPassWord());//实例化接口类  
  3.     Map<String, String> cookies = apiLibrary.getCookiesArguments();//获取cookies信息  
  4.     addCookie(cookies);//向浏览器插入cookies  
  5.     sleep(1);//休眠等待  
  6.     refresh();//刷新  
  7. }  

下面是封装的api类的请求接口获取cookies的方法:

[java]  view plain  copy
  1. //获取cookies,map集合  
  2. public Map getCookiesArguments() throws JSONException, IOException {  
  3.     Map cookiesArgs = new HashMap();//创建存放cookies的map集合  
  4.     CloseableHttpClient httpClient = HttpClients.createDefault();//创建并实例化连接对象  
  5.     JSONObject jsonObject = new JSONObject();//创建并实例化json对象  
  6.     jsonObject.put("did""web");//设置登录类型  
  7.     jsonObject.put("telnum", userMobile);//设置帐号  
  8.     jsonObject.put("password", passWord);//设置密码  
  9.     output(userMobile);  
  10.     output(passWord);  
  11.     String arguments = changeJsonToArguments(jsonObject);//将json对象转化为接口参数  
  12.     String url = "http://beta-web.gaotu100.com/user/web/login";//接口地址  
  13.     HttpPost httpPost = new HttpPost(url + arguments);//创建并实例化post请求连接  
  14.     CloseableHttpResponse response = httpClient.execute(httpPost);//执行请求获取响应  
  15.     output(response.getStatusLine().getStatusCode());//输出状态码  
  16.     if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {  
  17.         output("返回状态错误!");  
  18.     }  
  19.     HttpEntity entity = response.getEntity(); //获取响应实体  
  20.     JSONObject ssString = new JSONObject(EntityUtils.toString(entity));//获取响应实体的json数据  
  21.     output(ssString.toString());  
  22.     //获取相应数据  
  23.     String chat_app_id = ssString.getString("chat_app_id");  
  24.     String chat_name = ssString.getString("chat_name");  
  25.     String chat_user_sig = ssString.getString("chat_user_sig");  
  26.     String name = urlEncoderText(ssString.getString("name"));//对昵称进行转码  
  27.     String sid = ssString.getString("session_id");  
  28.     String role = "0";//默认为0  
  29.     //将数据存入map集合中  
  30.     cookiesArgs.put("chat_app_id", chat_app_id);  
  31.     cookiesArgs.put("chat_name", chat_name);  
  32.     cookiesArgs.put("chat_user_sig", chat_user_sig);  
  33.     cookiesArgs.put("name", name);  
  34.     cookiesArgs.put("sid", sid);  
  35.     cookiesArgs.put("role", role);  
  36.     httpClient.close();//关闭链接  
  37.     return cookiesArgs;//返回map集合  
  38. }  
下面是向浏览器插入cookies的方法:

[java]  view plain  copy
  1. public void addCookie(Map args) {  
  2.     Set keys = args.keySet();  
  3.     for(String key : keys){  
  4.         driver.manage().addCookie(new Cookie(key, args.get(key)));  
  5.     }  
  6. }  

你可能感兴趣的:(selenium自动化测试)