2016-08-18 190 views
0

我有一个网页,我已经在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调用将无法工作。

有人可以帮忙吗?

+0

你有没有尝试使用'webClient.waitForBackgroundJavaScript(NINETY_SECONDS);' 只有在ajax调用之后,在获取页面之后并在操作它之前(而不是在webClient初始配置)? – haihui

回答

0

我喜欢这个等待我的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); 
       } 
      } 
... 
0

您可以根据就业人数实现自己的等待仍悬而未决

JavaScriptJobManager tmpJobManager = myPage.getEnclosingWindow().getJobManager(); 
int tmpJobCount = tmpJobManager.getJobCount(jobFilter); 

在这种情况下,你可以提供您自己的JavaScriptJobFilter。所以你可以自由排除一些工作等待