java 模拟浏览器 表单,Java实现模拟浏览器 请求web服务

问题背景:测试工具要实现运行被测试设备里面的web服务中的某个url请求(HTML),运行里面js的相关事件,抓取返回值,这里关键是怎么通过工具实现请求被测试设备的url(web服务),这里我通过上网学习,写了几种思路的方法.

方法一:  直接使用Java方法调用系统浏览器,然后请求URL

下面是我实现这种思路的部分代码

public static void runBroswer(String url,int flag) {

try {

Desktop desktop = Desktop.getDesktop();

if (desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) {

URI uri = new URI(url);

desktop.browse(uri); //使用系统默认的浏览器执行这个url

Thread.sleep(2000);

//Runtime.getRuntime().exec("taskkill /F /IM Iexplore.exe");

Runtime.getRuntime().exec("taskkill /IM firefox.exe"); //因为我系统默认的是火狐,然后关闭火狐浏览器

}

}

这种方法,实现的效果在实际中,就是要调用浏览器,桌面会弹出浏览器界面,然后请求url;

方法二: httpclient httpurlconnection

后面我在想,能不能直接使用Java模拟浏览器直接实现url请求,开始是使用这两个httpclient 和 HttpUrlConnection来实现这个效果,下面是部分代码:

String strUrl = "http://localhost:8088/testWeb"; //这是我临时建的web项目,去访问它的index.jsp界面

URL url = new URL(strUrl);

HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();

InputStreamReader input = new InputStreamReader(httpcon.getInputStream(), "utf-8");

BufferedReader br = new BufferedReader(input);

StringBuffer sb = new StringBuffer();

String line = "";

while((line = br.readLine()) != null){ //读取每行数据

sb.append(line);

sb.append("\r\n");

}

String sbString = sb.toString();

System.out.println("result... "+sbString);

通过运行这部分代码发现.它只是完全返回HTML代码,并没有执行HTML里面的js onload()事件,也就是没有运行,js;当然我这部分代码是使用HttpUrlConnection类,也可以使用Httpclient类,第三方工具类;

方法三: 使用HtmlUtil 工具类

因为第二种方法我感觉他是没有运行js里面的事件,只是获取HTML代码,后面继续网上学习,发现了HtmlUtil这个工具类.

HtmlUnit是一款基于Java的没有图形界面的浏览器程序。它模仿HTML document并且提供API让开发人员像是在一个正常的浏览器上操作一样,获取网页内容,填充表单,点击超链接等等。

它非常好的支持JavaScript并且仍在不断改进,同时能够解析非常复杂的AJAX库,通过不同的配置来模拟Chrome、Firefox和IE浏览器。

下面是我实现的部分代码:

public static void main(String[] args) {

WebClient wc = new WebClient(BrowserVersion.getDefault());

wc.setJavaScriptEnabled(true); //启用JS解释器,默认为true

wc.setJavaScriptTimeout(100000);//设置JS执行的超时时间

wc.setCssEnabled(false); //禁用css支持

wc.setThrowExceptionOnScriptError(false); //js运行错误时,是否抛出异常

wc.setTimeout(10000); //设置连接超时时间 ,这里是10S。如果为0,则无限期等待

//wc.setWebConnection(

// new WebConnectionWrapper(wc) {

// public WebResponse getResponse(WebRequest request) throws IOException {

// WebResponse response = super.getResponse(request);

// if (request.getUrl().toExternalForm().contains("test.js")) {

// String content = response.getContentAsString("GBK");

// WebResponseData data = new WebResponseData(content.getBytes("UTF-8"),

// response.getStatusCode(), response.getStatusMessage(), response.getResponseHeaders());

// response = new WebResponse(data, request, response.getLoadTime());

// }

// return response;

// }

// }

//);

try {

//HtmlPage page = wc.getPage("http://192.168.0.1/Del_Bridge_Wan.html");

HtmlPage page = wc.getPage("http://localhost:8088/testWeb");

FileWriter fileWriter = new FileWriter("D:\\text.html");

System.out.println("over...");

String str = "";

//获取页面的XML代码

str = page.asXml();

fileWriter.write( str );

//关闭webclient

//wc.close();

wc.closeAllWindows();

fileWriter.close();

} catch (Exception e) {

e.printStackTrace();

}

}

通过运行这部分代码后发现,(注释部分解决编码问题,可以通过重写WebConnectionWrapper类的getResponse方法来修改返回值),运行了HTML里面的onload事件,达到了不调用浏览器也能访问url,并能运行js事件,而不是直接返回该HTML的源代码.最后打开生成的test.html就可以发现是我之前创建的testWeb服务index.jsp里面写的返回值;

End:因为实现这个需求都是在网上学习别人的很多例子,如有知识侵权,请联系本人删除;如果发现写的不好或者有建议的可以互相讨论,互相学习.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Selenium是用于自动化Web应用程序测试的工具。它允许开发人员使用Java编写脚本来模拟用户在浏览器中的操作,例如点击按钮、填写表单等。 要在Java项目中使用Selenium,您需要添加Selenium的Java库作为项目的依赖项。您可以在项目的pom文件中添加以下依赖项来引入Selenium Java库: ```xml <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.141.59</version> </dependency> ``` 这将使您可以在项目中使用Selenium的Java库。 一旦您设置了Java项目并添加了Selenium的依赖项,您就可以开始编写使用Selenium的测试脚本了。您可以使用WebDriver接口来启动浏览器,并使用它来执行各种操作,例如打开网页、定位元素和与元素进行交互。通过使用不同的定位策略,例如id、name、css选择器或XPath,您可以选择要操作的特定元素。以下是一些使用Selenium的示例代码: ```java // 引入谷歌驱动 ChromeOptions options = new ChromeOptions(); // 允许所有请求 options.addArguments("--remote-allow-origins=*"); WebDriver webDriver = new ChromeDriver(options); // 启动需要打开的网页 webDriver.get("https://www.baidu.com"); // 利用id定位元素:百度输入框,并在输入框中输入:软件测试 webDriver.findElement(By.id("kw")).sendKeys("软件测试"); // 通过name来定位 webDriver.findElement(By.name("wd")).sendKeys("软件测试"); // 通过css选择器来定位 webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试"); // 通过XPath来定位 webDriver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("软件测试"); ``` 通过上述代码,您可以在Chrome浏览器中打开百度首页,并在搜索框中输入关键字"软件测试"。您可以根据自己的需求编写更多的测试脚本来模拟用户在Web应用程序中的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值