2015-03-31 1 views
3

Я пытаюсь отлаживать скрипты casperjs using the remote debugger, и я обнаружил, что методы экземпляра casper не работают до завершения выполнения сценария. Похоже, что это некоторая обратная связь, когда выполняются функции then() и run() в casper, но я не уверен, как консольная консоль отладчика даже полезна, если вы не можете приостановить выполнение программы и запустить код как если он все еще работает (this answer действительно заставляет его звучать так, как вы можете).Не удается получить доступ к методам экземпляра casper в точках останова, используя удаленный отладчик PhantomJS

Например, hello_wolfram.js запускает экземпляр casper, переходит к вольфрам-альфа, перекликается с заголовком страницы, ищет фракталы, а затем снова повторяет заголовок страницы. Эти вызовы заголовков страниц отлично работают в запущенном скрипте, но если я попытаюсь запустить эту команду в консоли контекста casper, он вернет null. Ни один из других методов работы с кассой не работает. Переменная casper определена, хотя, и я получаю доступ к приятному, информативному объекту Каспера.

var casper = require('casper').create();                                                               
casper.start('http://www.wolframalpha.com');                                                              

// echo page title for sanity check 
casper.then(function(){ 
    debugger; // 1                                                                
    this.echo('Hello, Wolfram! The Page title is ' + this.getTitle());                                                   
});                                                                   

// enter search term and submit form 
casper.then(function() { 
    this.fill('form.index', {'i': 'fractals'}, true) 
});                                                                   

// echo page title on search results page 
casper.then(function(){ 
    debugger; // 2                                                                
    this.echo('The Page title is now ' + this.getTitle());                                                      
});                                                                   

casper.run(); 

Перерыв 1:

  • переменная Casper определена и возвращает объект Casper с CURRENTURL = "http://www.wolframalpha.com/"
  • casper.getTitle() возвращает нуль

Перерыв 2:

  • переменная Casper определена и возвращает объект Casper с CURRENTURL = "http://www.wolframalpha.com/input/?i=fractals"
  • casper.getTitle() возвращает нуль

Я был действительно надеясь, что я смогу запустить команды casper в консоли casper и посмотреть их влияние на DOM в другом окне, которое похоже на то, что даст вам отладчик. Есть ли способ сделать это с помощью casperjs?

ответ

0

Пока вы находитесь в точке останова, выполнение кассира приостанавливается. Вы можете получить доступ к любым свойствам объекта casper, но для запуска команд casper вам необходимо добавить их в очередь. Это просто означает обернуть его в casper.then(), а затем пройти мимо точки останова.

При разрыве одного, если вы запустите casper.steps.length, у вас есть 5 шагов, и вы находитесь на шаге 3 (вывод casper.step).

Вы можете добавить вам getTitle код, завернутые в casper.then():

casper.then(function() { 
    this.echo('The Page title is now ' + this.getTitle()); 
}); 

Теперь casper.steps.length === 6; вы добавили шаг сразу после текущего, , но вы все еще находитесь в точке останова.

Итак, продолжайте/шаг, и ваш текст будет напечатан. Если вы хотите, вы можете добавить дополнительные операторы debugger внутри блока casper.then(); вы остановитесь на шаге 4 (ваш новый шаг). Вкладка «Скрипты» будет обновлена ​​небольшим скриптом, содержащим только вашу функцию.


Более подробная информация о casper.then в этом ответе: https://stackoverflow.com/a/11957919

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

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