2016-12-20 4 views
1

Ich versuche, den folgenden Code auszuführen executeAsyncScript mit:executeAsyncScript Ablaufen

function get(url) { 
    var callback = function(args) { 
    console.log(args); 
    }; 

    var defer = protractor.promise.defer(); 
    browser.executeAsyncScript(function (url, callback) { 
    console.log("url" + url); 
    var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == XMLHttpRequest.DONE) { 
     console.log(xhr.responseText); 
     callback(xhr.responseText); 
     defer.fulfill(xhr); 
     } 
    } 
    xhr.open('GET', url , true); 
    xhr.send(); 
    }, url); 

    return defer.promise; 
}; 

function setupCommon() { 
    return get('https://example.com/rest/api/getsomething'); 
} 

var flow = protractor.promise.controlFlow(); 
flow.execute(setupCommon); 

Wenn ich den Code ausführen, die dann direkt im Browser-Konsole executeAsyncScript geben wird es funktioniert. Ich bekomme die erwartete Ausgabe.

console.log("url" + url); 
var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == XMLHttpRequest.DONE) { 
    console.log(xhr.responseText); 
    callback(xhr.responseText); 
    defer.fulfill(xhr); 
    } 
} 
xhr.open('GET', 'https://example.com/rest/api/getsomething', true); 
xhr.send(); 

Aber wenn ich es executeAsyncScript mit ausführen, es mal heraus zu sagen:

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. 

Die restapi sollte nicht viel Zeit genommen haben. Ich bin neu in all dem. Ich bin mir nicht sicher, was ich falsch mache. Kann mir bitte jemand dabei helfen?

Antwort

0

Der Standard-Timeout für Jasmin ist 2000 Millisekunden, die in Ihrem Fall unzureichend aussieht, wie es aussieht Sie in der Tat viele Stufen haben

Überprüfen Sie die Konfigurationsdatei Referenz doc here für verschiedene Timeout-Konfigurationen aus dem protractor.conf.js

Sie können entweder das Timeout auf Konfigurationsebene erhöhen, wie in unten

defaultTimeoutInterval: 60000, allScriptsTimeout:90000

Oder es für diesen Test erhöhen Fall allein

this.timeout(60000)

0

Das Standard-Timeout für ein Skript ausgeführt werden soll 0ms. In den meisten Fällen, einschließlich der folgenden Beispiele, muss das Skripttimeout WebDriver.Timeouts.setScriptTimeout (long, java.util.concurrent.TimeUnit) zuvor auf einen ausreichend großen Wert gesetzt werden.

Hier Link für Java-API, die

https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html#executeAsyncScript-java.lang.String-java.lang.Object...-

oben genannten Informationen liefert