這是本文件的舊版!
wget
Problem
網站大都有提供下載功能,驗證下載功能與內容是否正常是必要的測試項目之一。然而,SeleniumLibrary並沒有提供類似的keyword。本篇文章分享我們解決這個問題的歷程。
httpclient-4.3.5
${wget} –cookies=on –no-check-certificate –load-cookies cookies –output-document ${fileName} \ ${fileUrl}
How to?
透過外部程式
起初我們透過外部程式去達到我們需求。大部分linux安裝起來就內建wget;windows可以從這裡下載執行檔。
透過HttpClient Library
Download File [Arguments] ${fileUrl} ${fileName} Log ${fileUrl} ${cookies} Get Cookies @{jessonid} Split String ${cookies} JSESSIONID= ${location} Get Location IP ${ret} wget ${fileUrl} ${fileName} JSESSIONID=@{jessonid}[1] ${location} log ${ret}
import java.io.File; import java.io.FileOutputStream; import javax.net.ssl.SSLContext; import org.apache.commons.io.IOUtils; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.cookie.BasicClientCookie; import com.supermicro.ssm.common.Cleaner; public class WgetLibrary { public static final String ROBOT_LIBRARY_SCOPE = "TEST CASE"; public static final String ROBOT_LIBRARY_VERSION = "1.0.0"; private BasicCookieStore createCookieStore(String cookies, String domain, String path){ if( cookies == null || cookies.isEmpty() ) return null; BasicCookieStore cookieStore = new BasicCookieStore(); String[] cookiePairs = cookies.split(";"); for( String cookiePair : cookiePairs){ String[] cookieToken = cookiePair.split("="); BasicClientCookie cookie = new BasicClientCookie(cookieToken[0], cookieToken[1]); cookie.setDomain(domain); cookie.setPath(path); cookieStore.addCookie(cookie); } return cookieStore; } public long wget(String url, String destFile, String cookies, String domain){ return wget(url, destFile, cookies, domain, "/"); } public long wget(String url, String destFile, String cookies, String domain, String path){ CloseableHttpClient httpClient = null; FileOutputStream fos = null; CloseableHttpResponse response = null; try { HttpClientBuilder builder = HttpClientBuilder.create(); SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(); SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); builder.setSSLSocketFactory(sslSocketFactory); BasicCookieStore cookieStore = createCookieStore(cookies, domain, path); if( cookieStore != null ) { System.out.println("set cookie: " + cookies); builder.setDefaultCookieStore(cookieStore); } httpClient = builder.build(); response = httpClient.execute(new HttpGet(url)); System.out.println("destfile: " + new File(destFile).getAbsolutePath()); fos = new FileOutputStream(new File(destFile)); IOUtils.copy(response.getEntity().getContent(), fos); return response.getStatusLine().getStatusCode(); } catch( Exception e ){ throw new RuntimeException(e); } finally { Cleaner.close(fos); Cleaner.close(response); Cleaner.close(httpClient); } } }
Reference