2012-04-12 5 views
8

я пытаюсь сделать некоторые тесты с phantomjs ... в основном я хочу:контролируется асинхронной выход из phantomjs

  • открыть страницу на моем веб-сервере
  • когда страница инициализируется все JS страницы (загрузила)
  • вызова страницы JS из phantomjs и проверить результаты
  • выход phantomjs

кажется трудным для phantomjs т o обратите внимание, когда страница загрузилась.

Я мог бы использовать phantomjs для установки переменной «test» в окне или что-то еще, чтобы страница js могла проверить это, а затем вызвать обратный вызов после его завершения. Проблема в том, что обратный вызов может быть только обратным вызовом страницы, поэтому он не может делать ничего, что не могла выполнить страница.

Это может быть хорошо для tess, но последний шаг невозможен.

Я пришел с этим:

page.onConsoleMessage = function(msg) { 
    if (msg == "__quit__") { 
    phantom.exit(); 
    } 
    else { 
    console.log("page: " + msg); 
    } 
}; 

page.evaluate(function() { 
    window.quit = function() { console.log("__quit__"); }; 
}); 

Поэтому код страницы можно назвать window.quit() и монитор консоли затем может убить фантом. Это кажется немного взломанным. У кого-нибудь есть лучший способ сделать это?

+2

ничего не получили здесь, очевидно, так что я сделал веб-сервер для работы в phantomjs, он работает немного лучше: https://github.com/nicferrier/ phantomjsel/blob/master/ghostweb.js –

+1

Вы не можете подключиться к onLoadFinished обратному вызову объекта веб-страницы? http://code.google.com/p/phantomjs/wiki/Interface –

+0

Я даже не думал об этом. вы должны ответить :-) –

ответ

1

Отказ от ответственности: это непроверенный код

Вы могли бы прикрепить к onLoadFinished обратного вызова объекта веб-страницы. Это выполняется в области PhantomJS, поэтому вы сможете использовать все свои переменные.

Что-то вроде этого должно хватить:

page.onLoadFinished = function(){ 
    page.evaluate(function() { 
//call your testing code here 
    }); 

phantom.exit(); 
} 
Смежные вопросы