本人在使用selenium做測試的過程中,很多用例都是需要在登錄狀態下才能運行的,之前都是封裝一個登錄的方法,在學習了httpclient之後,想到一個通過請求登錄接口來獲取cookies值,再向瀏覽器插入cookies,使用戶處於登錄狀態。分享代碼,供大家參考。
下面是封裝好的登錄方法:
public void loginByApi() throws InterruptedException, NoSuchAlgorithmException, JSONException, IOException {
ApiLibrary apiLibrary = new ApiLibrary(getUserName(), getUserPassWord());//實例化接口類
Map<String, String> cookies = apiLibrary.getCookiesArguments();//獲取cookies信息
addCookie(cookies);//向瀏覽器插入cookies
sleep(1);//休眠等待
refresh();//刷新
}
下面是封裝的api類的請求接口獲取cookies的方法:
//獲取cookies,map集合
public Map<String, String> getCookiesArguments() throws JSONException, IOException {
Map<String, String> cookiesArgs = new HashMap<String, String>();//創建存放cookies的map集合
CloseableHttpClient httpClient = HttpClients.createDefault();//創建並實例化連接對象
JSONObject jsonObject = new JSONObject();//創建並實例化json對象
jsonObject.put("did", "web");//設置登錄類型
jsonObject.put("telnum", userMobile);//設置帳號
jsonObject.put("password", passWord);//設置密碼
output(userMobile);
output(passWord);
String arguments = changeJsonToArguments(jsonObject);//將json對象轉化爲接口參數
String url = "http://beta-web.gaotu100.com/user/web/login";//接口地址
HttpPost httpPost = new HttpPost(url + arguments);//創建並實例化post請求連接
CloseableHttpResponse response = httpClient.execute(httpPost);//執行請求獲取響應
output(response.getStatusLine().getStatusCode());//輸出狀態碼
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
output("返回狀態錯誤!");
}
HttpEntity entity = response.getEntity(); //獲取響應實體
JSONObject ssString = new JSONObject(EntityUtils.toString(entity));//獲取響應實體的json數據
output(ssString.toString());
//獲取相應數據
String chat_app_id = ssString.getString("chat_app_id");
String chat_name = ssString.getString("chat_name");
String chat_user_sig = ssString.getString("chat_user_sig");
String name = urlEncoderText(ssString.getString("name"));//對暱稱進行轉碼
String sid = ssString.getString("session_id");
String role = "0";//默認爲0
//將數據存入map集合中
cookiesArgs.put("chat_app_id", chat_app_id);
cookiesArgs.put("chat_name", chat_name);
cookiesArgs.put("chat_user_sig", chat_user_sig);
cookiesArgs.put("name", name);
cookiesArgs.put("sid", sid);
cookiesArgs.put("role", role);
httpClient.close();//關閉鏈接
return cookiesArgs;//返回map集合
}
下面是向瀏覽器插入cookies的方法:
public void addCookie(Map<String, String> args) {
Set<String> keys = args.keySet();
for(String key : keys){
driver.manage().addCookie(new Cookie(key, args.get(key)));
}
}