html页面工具-htmlUnit

 HtmlUnit测试工具的推出,创意非常好。是一款给java开发用的browser。说它是browser,其实它是对html建模并且提供API来访问页面,点击链接等等的java类库。

    这样的测试工具有这样几个优点:
运行起来没有界面,速度非常快。
由于是java类库,有无限扩展的可能,可以构造各种功能强大的工具。包括本地化测试,多种数据源输入数据。
跨平台,跨浏览器。java本身就有跨平台的特性,浏览器,只要简单的设定一个参数就可以轻易模仿想要的浏览器了。
转化为性能测试,非常简单,可以共享同一脚本。
 
官网:http://htmlunit.sourceforge.net/
 
代码示例:
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Arrays; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import com.gargoylesoftware.htmlunit.BrowserVersion; 
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; 
import com.gargoylesoftware.htmlunit.HttpMethod; 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.WebRequest; 
import com.gargoylesoftware.htmlunit.html.HtmlForm; 
import com.gargoylesoftware.htmlunit.html.HtmlInput; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; 
import com.gargoylesoftware.htmlunit.util.NameValuePair; 
 
public class MySina { 
 
    private WebClient  client; 
    private WebRequest request; 
    private String     sinaLoginUrl = " http://mail.sina.com.cn/cgi-bin/login.php"; 
    private String     hostSinaUrl  = ""; 
 
    public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException { 
        String username = "***"; 
        String password = "***"; 
        String newpassword = "***"; 
        String nickname = "***"; 
 
        MySina mySina = new MySina(); 
        if (mySina.mailLoginBySina(username, password)) { // 登录 
            mySina.updatePwdBySina(password, newpassword); // 修改密码 
            mySina.updateNickName(nickname); // 修改帐户昵称 
        } else { 
            System.out.println("登录失败!请检查用户名和密码是否正确!"); 
        } 
    } 
 
    public MySina(){ 
        client = new WebClient(BrowserVersion.INTERNET_EXPLORER_8); 
        client.setJavaScriptEnabled(false); 
    } 
 
    /** 
     * 更改帐户昵称 
     *  
     * @param nickname 昵称 
     * @return boolean 
     * @throws FailingHttpStatusCodeException 
     * @throws IOException 
     */ 
 
    public boolean updateNickName(String nickname) throws FailingHttpStatusCodeException, IOException { 
        String sinaSetUrl = hostSinaUrl + "basic/setting_account"; 
        request = new WebRequest(new URL(sinaSetUrl), HttpMethod.POST); 
        request.setCharset("utf-8"); 
        request.setRequestParameters(Arrays.asList(new NameValuePair("nickname", nickname), new NameValuePair("pop3", 
                                                                                                              "on"), 
                                                   new NameValuePair("imap", "on"))); 
        client.getPage(request); 
        HtmlPage p = client.getPage(hostSinaUrl + "classic/index.php"); 
 
        if (p.getBody().getTextContent().indexOf("\"NickName\":\"" + nickname + "\"") > 0) { 
            return true; 
        } else { 
            return false; 
        } 
 
    } 
 
    /** 
     * 修改密码 
     *  
     * @param oldpassword 旧密码 
     * @param newpassword 新密码 
     * @return boolean 
     * @throws FailingHttpStatusCodeException 
     * @throws IOException 
     */ 
 
    public boolean updatePwdBySina(String oldpassword, String newpassword) throws FailingHttpStatusCodeException, 
                                                                          IOException { 
        String sinaSetUrl = " http://login.sina.com.cn/member/security/password.php"; 
        request = new WebRequest(new URL(sinaSetUrl), HttpMethod.POST); 
        request.setCharset("gbk"); 
        request.setRequestParameters(Arrays.asList(new NameValuePair("pass", oldpassword), 
                                                   new NameValuePair("pass1", newpassword), 
                                                   new NameValuePair("pass2", newpassword))); 
        HtmlPage p = client.getPage(request); 
 
        if (p.getBody().getTextContent().indexOf("您的密码修改成功") > 0) { 
            return true; 
        } else { 
            return false; 
        } 
    } 
 
    /** 
     * 登录 
     *  
     * @param username 用户名 
     * @param password 密码 
     * @return boolean 
     * @throws FailingHttpStatusCodeException 
     * @throws MalformedURLException 
     * @throws IOException 
     */ 
 
    public boolean mailLoginBySina(String username, String password) throws FailingHttpStatusCodeException, 
                                                                    MalformedURLException, IOException { 
 
        HtmlPage loginPage = client.getPage(sinaLoginUrl); 
        HtmlForm loginForm = loginPage.getFormByName("free"); 
        HtmlInput u = loginForm.getInputByName("u"); 
        HtmlInput psw = loginForm.getInputByName("psw"); 
        HtmlSubmitInput loginButton = loginForm.getInputByName("登录"); 
        u.setValueAttribute(username); 
        psw.setValueAttribute(password); 
        HtmlPage result = loginButton.click(); 
        String resultUrl = result.getUrl().toString(); 
 
        if (resultUrl.indexOf("classic/index.php") > 0) { 
            String regex = "http://(.*?)/"; 
            hostSinaUrl = myRegex(resultUrl, regex, null); 
            if (hostSinaUrl.length() > 0) { 
                return true; 
            } else { 
                return false; 
            } 
        } else { 
            return false; 
        } 
 
    } 
 
    /** 
     * 正则匹配替换 
     *  
     * @param str 
     * @param reg 
     * @param replace 
     * @return 
     */ 
 
    public String myRegex(String str, String reg, String[] replace) { 
        String result = null; 
        Matcher m = Pattern.compile(reg).matcher(str); 
        while (m.find()) { 
            result = m.group(); 
            if (replace != null && replace.length > 0) { 
                for (String s : replace) { 
                    result = result.replace(s, ""); 
                } 
            } 
        } 
        return result; 
    } 
} 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值