Il y a la page testkrok.org.ua avec une sélection cohérente de paramètres. Je dois donc créer une série de 5 clics sur chacune des options de 5 cases de sélection qui dépendent les unes des autres.
document.querySelector('select.se1')[3]
document.querySelector('select.se2')[1]
document.querySelector('select.se3')[1]
document.querySelector('select.se4')[1]
document.querySelector('select.se5')[3]
pour rediriger vers la page avec des tests.
Mais sur l'instantané pris après le premier clic, le deuxième panneau n'apparaît pas? Peut-être que je ne touche pas l'élément?
var page = require('webpage').create();
page.open('https://testkrok.org.ua', function(status) {
console.log("Status: " + status);
if(status === "success") {
page.evaluate(function() {
var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var element = document.querySelector('select.se1')[3];
element.dispatchEvent(theEvent);
});
}
setTimeout( function() {
page.render('snapshot.png');
phantom.exit()
}, 5000);
});
Vous ne pouvez pas cliquer (déclencher un événement de clic) sur les options d'une zone de sélection. Vous devez modifier l'option sélectionnée, puis déclencher un événement de modification . Par exemple:
var sel = document.querySelector('select.se1');
sel.selectedIndex = 2;
var event = new UIEvent("change", {
"view": window,
"bubbles": true,
"cancelable": true
});
sel.dispatchEvent(event);
Vous pouvez emballer cela dans une fonction
function selectOption(selector, optionIndex) {
page.evaluate(function(selector, optionIndex){
var sel = document.querySelector(selector);
sel.selectedIndex = optionIndex;
var event = new UIEvent("change", {
"view": window,
"bubbles": true,
"cancelable": true
});
sel.dispatchEvent(event);
}, selector, optionIndex);
}
Ensuite, vous pouvez l'appeler l'un après l'autre
selectOption("select.se1", 2);
selectOption("select.se2", 0);
selectOption("select.se3", 0);
...
Vous avez eu l'idée. Dans le cas où l' onChange
événement de la boîte de sélection nécessite des données à distance, par exemple via AJAX, vous devrez alors attendre entre les appels. Utilisez un temps d'attente statique (voir l'exemple suivant) ou utilisez waitFor()
.
setTimeout(function(){
selectOption("select.se1", 2);
}, 1000);
setTimeout(function(){
selectOption("select.se2", 0);
}, 2000);
setTimeout(function(){
selectOption("select.se3", 0);
}, 3000);
...
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots