Comment cliquer sur une "option de sélection", puis évaluer le contenu chargé avec casperjs
Je suis en train de ramper les tailles pour ce produit:
Le problème: Les tailles sont chargés après la couleur du produit est sélectionné.
Dans le produit code source de la page, je vois que la liste a un onchange-méthode: Il clique sur le formulaire n ° postColor onchange.
L'sélectionnez le menu déroulant:
<select name="color" id="color" class="cposelect" onchange="document.getElementById('postColor').click();" style="width:150px;margin-right: 20px; float: left;">
<option selected="selected" onfocus="if (this.storeCurrentControl != null) storeCurrentControl(event, this);" value="0">Select colour</option>
<option onfocus="if (this.storeCurrentControl != null) storeCurrentControl(event, this);" value="-8027">Light Camel</option>
<option onfocus="if (this.storeCurrentControl != null) storeCurrentControl(event, this);" value="-9999">black</option>
</select>
La #postColor la forme, qui est cliqué onchange:
<input type="submit" name="postColor" value="" onclick="location.href=('./?model=10344-4180&color='+document.forms[0].color.value+'&size='+document.forms[0].size.value+'&addbread=OUTLET&addbread2=DRIZIA&currentimage='+document.getElementById('currentimage').value+'&selectedmi=a1_INDEX_14&prev=10850-4314&next=10413-4183'); return false;" id="postColor" class="cpobutton " style="display: none;">
C'est mon code jusqu'à présent et il ne fonctionne pas:
casper.start('http://shop.baumundpferdgarten.com/showmodel/?model=10344-4180&addbread=OUTLET&addbread2=DRIZIA&color=0¤timage=1&selectedmi=a1_INDEX_14', function() {
this.test.assertExists('select[name="color"] option:nth-child(2)');
this.click('select[name="color"] option:nth-child(2)');
this.waitForSelector('select[name="size"] option:nth-child(2)', function() {
this.test.pass('selector is !');
var sizes = this.evaluate(function() {
console.log("======== evaluating ========");
//var sizes = document.querySelectorAll('#size option');
return document.querySelectorAll('#size option');
});
for (var i = sizes.length - 1; i >= 0; i--) {
console.log(sizes[i].innerText);
}
});
});
Je soupçonne que le problème est qu'une toute nouvelle page est chargée quand une couleur est cliqué (les tailles ne sont pas dynamiquement en annexe).
Comment voulez-vous résoudre ce problème?
source d'informationauteur 2083
Vous devez vous connecter pour publier un commentaire.
C'est comment je le fais
La
change()
est très importantJe suis en supposant que vous avez jQuery sur la page
Suis même question ici. Ma solution est:
Recommandé jQuery solution ne fonctionne pas pour moi.
Tout, le
capture()
commande affiche l'sélectionnez l'option sélectionnée visuellement, il ne fait pas déclencher l'événement. Essayez d'utiliser ceci avec l'waitForText()
de commande par exemple, le programme de temporisation.Ce qui a fonctionné pour moi, a été le code fourni ci-dessous (merci @ArtjomB).
Comment remplir sélectionnez un élément qui n'est pas incorporé dans un formulaire avec CasperJS?
Bien, je pense CasperJS devrait fournir un support natif pour sélectionner les options à partir d'une liste déroulante quand ils ne sont pas en dehors d'un formulaire (http://docs.casperjs.org/en/latest/modules/index.html). Le sélénium offre la
select
etaddSelection
commandes (https://seleniumhq.github.io/selenium/docs/api/javascript/index.html). J'ai également déposé une question en suspens billet sur le CasperJS GitHub page pour mettre en œuvre ce mode natif (https://github.com/n1k0/casperjs/issues/1390).c'est simple code à entrer les détails de carte de crédit dans casper js
casper.évaluer(function(CC,security_code) {
Difficile, mais en regardant l'URL, je pense que Casper pouvez gérer ce bien.
Laissez-moi savoir si vous avez besoin d'aide avec le code pour cela, mais cela va prendre un peu plus de temps afin de vous donner un peu de pseudo-code,
http://shop.baumundpferdgarten.com/showmodel/?model=10344-4180&color=-9999&size=0&addbread=OUTLET&addbread2=DRIZIA¤timage=1&selectedmi=a1_INDEX_14&prev=10850-4314&next=10413-4183
et remplacer la couleur ID oùcolor=-9999
.Je ne sais pas si vous avez trouvé une solution à votre problème, mais voici comment je pourrais résoudre:
Un peu hacky façon de le faire sans à l'aide de jQuery en utilisant intégré dans casper méthodes:
C'est à la Machine, mais vous pouvez le modifier pour vanilla JS si vous avez besoin de. Vous avez besoin d'utiliser une fonction récursive car un normal pour boucle est en difficultés avec capser du système de file d'attente.
vanille javascript solution (déclenchement onchange méthode):
tejesh95 la solution a fonctionné pour moi avec quelques changements mineurs, n ° 1, je ne pouvais pas obtenir findElementById de travail donc passé à 'document.querySelector('#selectorId)' . J'ai aussi dû changer 'onchange' "onclick". Voici le code à l'intérieur de la casperjs harnais de test:
})
Suivre sur remarque: Votre kilométrage peut varier sur le dessus, j'ai trouvé des résultats incohérents ailleurs, la valeur du texte permettrait de mettre à jour, mais le contrôle ne serait pas le feu. Frustrant!