2012-05-19 9 views
1

Тестирование CasperJS на системе с якорем с href, прикрепленным к javascript. Выполнение обычныхДоступ к якорю с href/Javascript

casper.then(function() { 
this.evaluate(function() { 
//  document.querySelector('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]').click(); // works in FF 
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 

     //eval("submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH_1');"); 
//submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 

//  this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  self.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  this.this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
.. 

}); 

}); 

Ни один из вышеперечисленных подходов не работал. Репозитории Git для проектов показывают, что у Casper есть библиотека CasperUtils/ClientUtils, которая, как представляется, имеет __utils__, которая имеет метод щелчка, который является способом вызова элементов href="javascript:foo()".

Однако, я не могу понять, как это работает.

Если кто-то использовал CasperJS и имеет образец кода о том, как это реализовано, мы будем благодарны!

В идеале, конечный результат должен быть что-то вроде:

casper.then(function() { 
    e=document.querySelector("id['foo']"); 
    CasperUtilsSomething.click(e); 
}); 

Или, если у вас есть указатель на тест кода случае, я мог бы бежать, что позволит нам увидеть, как это должно быть реализовано ,

+2

Прежде чем работать с такими библиотеками, вам следует лучше прочитать некоторые уроки. – Andreas

+0

Андреас. Здравствуй. Спасибо за ответ. И я попытался прочитать все, что мог найти о том, как это реализовать. Есть ли у вас какие-либо знания в учебном пособии, в котором описывается, как это реализовать. Я не мог найти ни одного, в том числе с youtube, репозитории GIT, форумов поддержки, архивов списков рассылки и т. Д. Любое другое место, о котором вы можете думать? Я только обратился сюда как к последнему вопросу. –

+0

«tom» (aka bruce), сделай себе одолжение и сделай этот учебник http://ejohn.org/apps/learn/ - таким образом вы, вероятно, поймете гораздо больше, что здесь происходит – NiKo

ответ

1

Похоже, проблема здесь заключается в путанице вокруг объема функции. Это сложная задача по работе с PhantomJS (на которой построен CasperJS) - существует две полностью отдельные области, одна из которых выполняется в контексте PhantomJS и имеет доступ к объекту casper и область «песочницы», которая удалена код запускается - все, что запускается в casper.evaluate(), например, выполняется в изолированной среде в удаленном контексте без доступа к объекту casper или его методам.

Так пытается вызвать this.click() в casper.evaluate() происходит сбой - функция, которую вы бежите не имеет доступа к экземпляру casper и this будет ссылаться на window объекта в браузере.

Обычно, как вы могли бы сделать это просто:

casper.then(function() { 
    casper.click('#CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 
    casper.evaluate(function() { 
     // some function that needs to run after clicking 
    }); 
}); 

Следует также отметить, что, насколько я знаю, вы вообще не можете запустить любой window.onload код в casper.evaluate() - load событие окна будет уже уволили к моменту запуска вашего кода.

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

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