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;
    }
}

  

时间: 2024-10-03 18:24:53

html页面工具-htmlUnit的相关文章

jekyll介绍安装.github静态页面工具

jekyll build # => 当前文件夹中的内容将会生成到 ./site 文件夹中. $ jekyll build --destination <destination> # => 当前文件夹中的内容将会生成到目标文件夹<destination>中. $ jekyll build --source <source> --destination <destination> # => 指定源文件夹<source>中的内容将会生

微软Connect教程系列--自动生成增删改查页面工具介绍(二)

本章课程描述了vs2015的三个特点,其中主要将描述在vs2015下面,使用命令自动生成增删改查界面,具体如下: 1.web.config文件不在存在,用config.json替代,以适应支撑vs的插件化. 即config.json可以在项目中不存在,你可以用xml文件或其他方式创建数据库连接. 2.获取nuget包更便捷 打开project.json,在dependencies节点输入“Newtonsoft.json”,并选择好相应版本,保存后,vs的引用就会自动从nuget上下载newton

Javascrpt 页面工具

/** *  笔者:DL *  时间:2014-3-19 * PagingTool模块提供最基本的.网页工具栏.和页面数据 回电话 可扩展性 分页工具栏介绍,和页面呈现的数据 *   主意事项:必须引用json.js * @module PagingTool */ var PagingTool = {} PagingTool.Init = {} //初始化參数 PagingTool.funPageCallBack = function (data) { var pParams = data.pP

ASP.NET 数据库页面访问简单工具

在工作中,有很多项目已上线后,很多项目的数据库服务器都不会对外开放的,外网想直接访问客户数据库服务器时,可能会出现困难. 这时就需要一个可以查询,更新数据库操作的页面了: 本来用sql语句直接操作数据库数据是不好的,所以此页面工具只针对已经非常熟悉数据库结构的人来使用,因为可以执行更新/修改语句,请慎用. 目前没对这个页面做任何的访问限制,出于对数据的安全性考虑,强烈建议对本页面的访问做访问限制处理! <%@ Page Language="C#" %> <%@ Imp

常用性能测试工具和命令汇总

测试大块 测试子块 工具或命令 用途和说明 APP前端 Android端     应用性能(CPU) 命令:adb shell(dumpsys cpuinfo) 测试在空闲.中等消耗.高消耗下cpu的运行情况 命令:top -m 5 -s cpu 应用性能(内存) 命令:adb shell(dumpsys meminfo ) 测试内存的运行情况 命令:getprop |grep dalvik.vm.heapgrowthlimit 应用性能(电量) 命令:adb shell(dumpsys bat

解决微信转发到朋友圈没有获取页面头像以图标展示。

http://203.195.235.76/jssdk/#menu-webview  微信JS-SDK demo https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign  微信js接口签名校验工具 做移动页面要加入微信官方的jssdk的 js 还有wx.config配置. 如果出现signature 报错提示,说明页面本身的url和签名生成的不一致: 按照微信公众平台的开发文档,签名错误排查方法如下: invalid signatur

网站页面识别基础上

今天学到了网页的基础知识.有:一.静态网页和动态网页的区分.静态网页是不连接数据库,后期如果想要更改网页的主页图片或产品需要程序员用源代码进行更改.而动态网页是非程序员也可以通过后台页面,增删图片的.通常静态网页作用多于静态网页.二.通过DW软件查看网页的代码,里面的代码含义以及一些IT的英文注解意思.1.在html中静态页面工具例如:①CSS:具有美化网页的作用:②java script:是脚本语言的意思.做特效用的.例如:网页的大图进行更换时,或建设二级或三级连接?③Xml:和Html的语法

自定义tld标签,页面使用

背景需求: 系统本身的session不能在页面使用 如下: controller: @RequestMapping(method=RequestMethod.GET) public String getIndex(HttpServletRequest request){ //获取工具id,返回页面工具id,为设置页面高度 request.setAttribute("toolId",toolManager.getCurrentPlacement().getId().replaceAll(

Java 爬虫工具Jsoup解析

Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据. jsoup 的主要功能如下: 1. 从一个 URL,文件或字符串中解析 HTML: 2. 使用 DOM 或 CSS 选择器来查找.取出数据: 3. 可操作 HTML 元素.属性.文本: jsoup 是基于 MIT 协议发布的,可放心使用于商业项目. jsoup 可以从包括字符串.URL