我有一个项目,我需要使用一个站点从中获取数据。所以事情是这样的:使用htmlUnit我用我的数据填充文本框,然后我按下锚,它使用ajax下载我需要的内容并动态更改超文本标记语言页面,在模态窗口中显示内容。但是在我使用锚上的. Click()后,我得到了相同的页面,没有更新,在寻找解决方案后,我在网络上发现了这个:
HtmlUnit将执行Ajax调用并更新页面。请注意,与常规页面加载不同,Click()调用不会等待Ajax请求完成。它将立即进行下一行代码。
这是我的代码:
final HtmlPage page = webClient.getPage("myUrl");
System.out.println(page.asXml());
final HtmlForm form = page.getFirstByXPath("//form[@action='myFormAction']");
final HtmlTextInput input = form.getInputByName("url");
input.setText(vacancyURL);
List<HtmlAnchor> anchors = page.getAnchors();
HtmlAnchor link = null;
for (HtmlAnchor anchor : anchors) {
String str = anchor.asText();
if (anchor.asText().equals("Start"))
link = anchor;
}
HtmlPage page2 = link.click(); //I think this is a problem
有什么想法我如何点击锚并等待ajax收到回复,并用数据填充页面(在浏览器上一切正常)?我真的需要帮助,有什么想法吗?
我同意塔萨维尔的观点,依赖状态/元素通常是一件好事。
根据远程网站上的javascript,您还可以询问webclient有多少JAVScript线程仍在进行中。对于eg:
int wait = 0;
int nbProcess = 1;
while (nbProcess > 0 && wait < 10) {
nbProcess = client.waitForBackgroundJavaScript(1000);
if (wait == 9) {
System.err.println("** needs more time ** ");
}
wait++;
}
警告:某些站点可以永久运行一个或多个脚本,因此最小的nbProcess可能是1、2...
链接到javadoc
是的,你必须等待执行,最好是重试一段时间,直到页面没有更新(使用任何条件)这里是代码示例
int input_length = page.getByXPath("//input").size();
int tries = 5;
while (tries > 0 && input_length < 12) { //you can change number of tries and condition according to your need
tries--;
synchronized (page) {
page.wait(2000); //wait
}
input_length = page.getByXPath("//input").size(); //input length is example of condtion
}
哦,这是个老问题。。我想分享我的解决方案。。我想是第页。等等,真恶心。。。因为ajax请求完成后不会立即通知您,所以会有延迟。。我的答案是使用方法
com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManager
调用示例:page.getEnclosingWindow(). getJobManager(). waitForJobs(1000);
Page是一种com.gargoylesoftware.htmlunit.html.HtmlPage
1000是timeoutMillis,这意味着您要等待的最大时间(以毫秒为单位)
问题内容: 我有一个页面,使用被称为100次(async:true)的jQuery.ajax,问题是,当它们都被加载时,我需要系统等待所有100次调用返回后才能继续。我将如何处理? 提前致谢!:) 更新: 这些调用在for()循环中进行(其中有100个:) 问题答案: 最好的方法是使用。您可以按以下方式使用它: 另外,如果您在数组中拥有所有AJAX调用,则可以使用: 请注意,这至少需要jQuery
问题内容: 我有一个基于GWT的页面,我想使用HtmlUnit为它创建一个HTML快照。该页面使用产品上的Ajax / JavaScript信息进行加载,因此大约1秒钟会出现一条正在加载…消息,然后显示内容。 问题是HtmlUnit似乎无法捕获信息,而我得到的只是“正在加载…”范围。 以下是HtmlUnit的实验代码,我在其中尝试给它足够的时间来等待数据加载,但是它似乎并没有改变任何内容,而且我仍
问题内容: 如何让selenium等待日历小部件的加载?现在,我只是在将测试用例导出到junit程序后进行操作。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用
问题内容: 如何让硒等待日历小部件的加载?现在,在将测试用例导出到junit程序后,我只是在做一个。 问题答案: 我会用 这将一直等待,直到元素出现在DOM中为止。 如果您需要检查元素是否可见,则最好使用
有什么想法吗?没有JS库。 编辑:我做了几次回拨尝试。老实说,我很难理解他们。下面是我的最后一次尝试:
我有一个Vue组件,我试图从使用axios的API获取一些数据。 函数位于Vue组件文件之外的另一个JS文件中,该文件使用axios.get. 问题是,未定义,因为需要一些时间才能返回响应数据。如何等待响应数据然后返回?