2016-12-20 4 views
1

Я пытаюсь выполнить executeAsyncScript, используя следующий код:executeAsyncScript времени из

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); 

Если я выполнить код, который передается executeAsyncScript непосредственно в консоли браузера, то он работает. Я получаю ожидаемый результат.

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(); 

Но когда я исполню ее с помощью executeAsyncScript, это раз, говоря:

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

restapi не должен был много времени. Я новичок во всем этом. Я не уверен, что я делаю неправильно. Может кто-то, пожалуйста, помогите мне с этим.

ответ

0

таймаут по умолчанию для Жасмин составляет 2000 миллисекунды, который выглядит неадекватным в вашем случае, как это выглядит, как вы на самом деле есть много шагов

Проверьте эталонные конфигурационный файл doc here для различных конфигураций тайм-аута от protractor.conf.js

Вы можете увеличить время ожидания на уровне конфигурации, как в ниже

defaultTimeoutInterval: 60000, allScriptsTimeout:90000

Или увеличить его для этого теста дело в одиночку

this.timeout(60000)

0

таймаут по умолчанию для сценария будет выполнен в 0ms. В большинстве случаев, включая приведенные ниже примеры, нужно заранее установить время ожидания сценария WebDriver.Timeouts.setScriptTimeout (long, java.util.concurrent.TimeUnit) до достаточно большого значения.

Вот ссылка на Java API, который обеспечивает выше информацию

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

 Смежные вопросы

  • Нет связанных вопросов^_^