2016-10-26 5 views
-1

Kann mir bitte jemand sagen, warum das Beispiel in der unten stehenden Link nicht funktioniert. Ich habe das Timeout sogar auf 12 Sekunden erhöht. Zeige mir immer => console.log ("'waitFor()' timeout");PhantomJs Beispiel funktioniert nicht?

-Link: https://github.com/ariya/phantomjs/blob/master/examples/waitfor.js

ich das Beispiel kopiert, aber nicht funktioniert. Ich versuche es mit 'Phantomjs' zu starten. Kann mir bitte jemand sagen, was die möglichen Gründe sein könnten?

PhantomJS Version: 2.1.1

Antwort

0

Ich habe dieses Skript geändert, und jetzt ist es funktioniert:

/** 
* Wait until the test condition is true or a timeout occurs. Useful for waiting 
* on a server response or for a ui change (fadeIn, etc.) to occur. 
* 
* @param testFx javascript condition that evaluates to a boolean, 
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or 
* as a callback function. 
* @param onReady what to do when testFx condition is fulfilled, 
* it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or 
* as a callback function. 
* @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used. 
*/ 

"use strict"; 
function waitFor(testFx, onReady, timeOutMillis) { 
    var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 5000, //< Default Max Timout is 3s 
     start = new Date().getTime(), 
     condition = false, 
     interval = setInterval(function() { 
      if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) { 
       // If not time-out yet and condition not yet fulfilled 
       condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code 
      } else { 
       if(!condition) { 
        // If condition still not fulfilled (timeout but condition is 'false') 
        console.log("'waitFor()' timeout"); 
        phantom.exit(1); 
       } else { 
        // Condition fulfilled (timeout and/or condition is 'true') 
        console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms."); 
        typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled 
        clearInterval(interval); //< Stop this interval 
       } 
      } 
     }, 250); //< repeat check every 250ms 
}; 


function click(sel){var event=document.createEvent('MouseEvents');event.initMouseEvent('click',1,1,window,1,0,0,0,0,0,0,0,0,0,null);document.querySelector(sel).dispatchEvent(event);} 
var page = require('webpage').create(); 

// Open Twitter on 'sencha' profile and, onPageLoad, do... 
page.open("https://twitter.com/sencha", function (status) { 
    // Check for page load success 
    if (status !== "success") { 
     console.log("Unable to access network"); 
    } else { 
     page.evaluate(function(click) {click('a[id="signin-link"]');},click)//,click will be available 
     // Wait for 'signin-dropdown' to be visible 
     waitFor(function() { 
      // Check in the page if a specific element is now visible 
      return page.evaluate(function() { 
       return $("div#signin-dropdown").is(":visible"); 
      }); 
     }, function() { 
      console.log("The sign-in dialog should be visible now."); 
      phantom.exit(); 
     }); 
    } 
page.render('sencha.png'); 
}); 
+0

Nun senden wir ein Klicken, das Dropdown-Menü zu öffnen und sichtbar machen. –

+2

* Meta-Kommentar: * Hallo Igor, ich habe bemerkt, dass du manchmal Antworten löschst, die du keine Rückmeldung erhalten hast. Bitte tu das nicht. Wenn es keine andere bessere Antwort gibt, kann Ihre Antwort tatsächlich zukünftigen Lesern helfen. Ich kann auch sagen, dass einige Fragesteller tatsächlich vergessen, dass sie eine Frage gestellt haben und manchmal ihre Frage zu einem viel späteren Zeitpunkt erneut aufsuchen werden. Ich habe Antworten über ein Jahr nach der Veröffentlichung erhalten. Bitte besuche [deine kürzlich gelöschten Antworten] (http://stackoverflow.com/users/recently-deleted-answers/4535610) und schaue sie durch, um zu sehen, ob du einige von ihnen wiederherstellen kannst. –