如何在 HttpClient 或 Html 单元中调用 javascript

Posted

技术标签:

【中文标题】如何在 HttpClient 或 Html 单元中调用 javascript【英文标题】:How to call a javascript in HttpClient or Html Unit 【发布时间】:2012-04-14 17:43:52 【问题描述】:

我正在使用 http 客户端 POST 方法在网站中执行特定操作, 为此,它使用产生 requestID 的 ajax 连接的 javascriptvar reqID = Math.floor(Math.random()*1000001); 发布。 我想访问该 reqID 以执行操作。 谁能帮助我了解如何访问 HttpClient 中的 java 脚本? 或者我们可以使用 htmlUnit 访问 javascript 的特定 reqID 变量吗?

我的 JS 包括:

ajaxConnection.prototype.execute = function() 
    var reqID = Math.floor(Math.random()*1000001);
    var params = "reqID=" + reqID ;
    for (var key in this.connection_parameters) 
        params += "&" + key + "=" + this.connection_parameters[key];
    

我正在调用 POST 以执行操作,即

String Src = PageSource_Post("http://www.example.com/ajax/ratingClient.php", new String[][]"reqID","","id", "329602","cmd", "rate","rating", "2",, null);

到目前为止,我将 reqID 保留为空白,其他参数是从 pagesource 获取的! 我也在尝试使用 HtmlUnit 也喜欢

webClient.setJavaScriptEnabled(true);
HtmlPage firstPage = webClient.getPage("http://www.example.com/");
HTMLScriptElement script = new HTMLScriptElement();

我必须从这里访问特定的reqID 变量吗?

【问题讨论】:

发布您的代码,以便社区可以更好地帮助您 @LuiggiMendoza 我的 js 包括 ajaxConnection.prototype.execute = function() var reqID = Math.floor(Math.random()*1000001); var params = "reqID=" + reqID ; for( var key in this.connection_parameters ) params += "&" + key + "=" + this.connection_parameters[key]; 并且我正在调用 POST 以执行操作,即 String Src = PageSource_Post("http://www.example.com/ajax/ratingClient.php", new String[][]"reqID","","id", "329602","cmd", "rate","rating", "2",, null); 到目前为止,我已将 reqID 保持为空白,其他参数是从 pagesource 获取的!!跨度> @LuiggiMendoza 我正在尝试使用 HtmlUnit 也喜欢 webClient.setJavaScriptEnabled(true); HtmlPage firstPage = webClient.getPage("http://www.example.com/"); HTMLScriptElement script = new HTMLScriptElement(); 从这里我必须访问特定的 var reqID = Math.floor(Math.random()*1000001); 或总 js 以获得确切的值 @Aspirant:您应该编辑您的帖子以包含您的代码(不要将代码添加为评论)。它更具可读性,这就是编辑的目的。 :) 这是一个 php 问题,而不是 Java 问题 (example.com/ajax/ratingClient.php),或者您需要帮助以在 Java 中实现这一点? 【参考方案1】:

你的意思是网络浏览器?

firefox 的 firebug 和 IE 的 F12

这些工具将帮助您调试 javascript,您应该在 javascript 代码中切换断点,并逐步运行以查看您的 reqID 的值

【讨论】:

我猜当他说HTTPClient 或HTML Unit 时,他的意思是“HTTPClient 或HTML 单元”而不是“网络浏览器”。 @yahz 兄弟我正在使用 HttpClient,所以我使用 firebug 完成了调试过程,发现 reqID 是从我的页面源中的 ajaxconnection.js 触发的!现在因为我需要在 javascript 中发布 reqID,所以我需要有关如何使用 HttpClient 或 Html UNIT 从 javascript 访问该 reqID 变量的指导.....【参考方案2】:

看起来您想从 Java 中执行 javascript。就我个人而言,我发现 HTMLUnit 和 HTTPUnit 的 javascript 支持有点欠缺。我们也遇到过类似的问题,并且使用 Selenium 取得了巨大的成功。您可以使用 Selenium IDE 创建一个快速测试用例,它是一个 firefox 插件(http://docs.seleniumhq.org/projects/ide/)。它允许您在 Firefox 中记录您的步骤,并将测试用例导出到 JUnit 测试。这是一个很好的步骤链接。 http://university.utest.com/selenium-basics-part-3-record-test-case-and-export-in-junit-format/

【讨论】:

以上是关于如何在 HttpClient 或 Html 单元中调用 javascript的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试

如何在 C# 中使用 HttpClient 发送文件和表单数据

如何在静态方法或自定义类中注入 HttpClient?

如何在 .NET 测试中传入模拟的 HttpClient?

在 Visual Studio 2013 中使用 HttpClient 进行单元测试/集成测试 Web API

如何使用HttpClient认证机制