2014-05-01 3 views
1

Je souhaite utiliser CasperJS pour cliquer sur chaque date activée dans un outil de date JQuery UI, faire quelque chose pendant que l'utilisateur clique dessus, puis revenir en arrière et cliquer sur la date suivante. Le problème ici est qu'une fois que j'ai le datepicker affiché, je ne sais pas comment obtenir les sélecteurs pour les ancres dans son corps et son corps seulement.Itération d'un outil de saisie d'adresse JQuery via CasperJS

Je ne pense pas que CasperJS fasse quelque chose de similaire à jquery où vous pouvez lui passer un sélecteur et récupérer un tableau d'éléments.

Je pourrais tomber dans un appel evaluate et obtenir le tableau via jquery, mais alors je devrais le renvoyer en tant que sélecteurs uniques valides pour CasperJS à boucle. Je pourrais utiliser jquery pour obtenir le contenu de chaque ancre, comme "1", puis utiliser clickLabel de CasperJS, mais clickLabel étend uniquement par tag, donc tout ce que je pourrais dire est "cliquez sur l'ancre dont le contenu est '1' ", puis potentiellement cliquer sur la mauvaise chose s'il existe plusieurs ancres avec le contenu" 1 "à l'écran.

Répondre

1

Vous n'avez pas besoin de jQuery pour cela. XPath peut être utilisé pour concevoir une bonne fonction de sélection pour les jours datepicker comme si:

var x = require('casper').selectXPath; 
function daySelector(day) { 
    return x("//*[contains(@class,'ui-datepicker')]//td[@data-handler='selectDay']/a[text()='"+day+"']"); 
} 

Puisque vous connaissez les chiffres que vous souhaitez cliquer, vous pouvez le faire (non testé):

var numbers = [2,3,4,5,6,7], 
    pickerSelector = ".ui-datepicker"; 
casper.thenEach(numbers, function(num){ 
    num = num.data; 
    // TODO: click into the date field 
    this.waitUntilVisible(pickerSelector); 
    this.thenClick(daySelector(num)); 
    this.waitWhileVisible(pickerSelector); 
    // TODO: Check or do something you need 
});