window.setTimeout导致htmlunit运行缓慢
问题描述:
我有一个网页,我已经在javascript中实现了window.setTimeout
。事情是我正在实现一个计时器,当时间到期时弹出消息。该值存储在cookie中。window.setTimeout导致htmlunit运行缓慢
所以,当页面加载时,我配置超时值的计时器。因此,即使页面重新加载,计时器也会在每次页面加载时重新创建。
现在,当我试图通过htmlunit(版本 - 2.15)测试这个时,我的每个页面开始加载的时间比平时长。
我们有以下配置的Web客户端
webClient.getOptions().setTimeout(FIVE_MINUTES_IN_MILLIS);
webClient.waitForBackgroundJavaScript(NINETY_SECONDS);
我猜window.setTimeout
在实施的HtmlUnit的方式是,它会等待计时器执行或waitForBackgroundJavaScript超时值(以先到为准)。因此,我的htmlunit运行速度变慢,因为我的计时器很高(30分钟),而我的htmlunit每一步都在等待90秒。
我应该如何配置我的htmlunit,以便我的脚本不会等待那个定时器。此外,我需要有waitForBackgroundJavaScript
,否则,我的ajax调用将无法工作。
有人可以帮忙吗?
答
我喜欢这个等待我的Ajax调用:
...
HtmlPage page = (HtmlPage) webClient.getPage(url);
HtmlInput details = null;
int tries = 10;
while (tries > 0 && details == null) {
tries--;
details = (HtmlInput) page.getElementById("PlaceHolderConteudo_grdListaResultado_btnDetalhar_0");
synchronized (page) {
page.wait(1500);
}
}
...
答
您可以根据就业人数实现自己的等待仍悬而未决
JavaScriptJobManager tmpJobManager = myPage.getEnclosingWindow().getJobManager();
int tmpJobCount = tmpJobManager.getJobCount(jobFilter);
在这种情况下,你可以提供您自己的JavaScriptJobFilter。所以你可以自由排除一些工作等待
你有没有尝试使用'webClient.waitForBackgroundJavaScript(NINETY_SECONDS);' 只有在ajax调用之后,在获取页面之后并在操作它之前(而不是在webClient初始配置)? – haihui