Comment cliquer sur les options de la boîte de sélection à l'aide de PhantomJS

khex

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);
});
Artjom B.

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment définir la première option sur une boîte de sélection à l'aide de jQuery?

Comment puis-je sélectionner toutes les options de la boîte de sélection à sélection multiple en un clic?

Comment obtenir plusieurs valeurs de boîte de sélection à l'aide de jQuery?

Ajout d'options dans la boîte de sélection à l'aide de jquery

Bootstrap - Comment afficher la boîte modale à l'aide de l'option de sélection?

Comment cliquer sur la boîte de dialogue "Lancer l'application" dans Firefox avec Selenium?

comment remplir les options pour une sélection de réaction en récupérant les valeurs d'une API pour qu'elles soient visibles lorsque vous cliquez sur la boîte de sélection?

Options de la boîte de sélection de l'administrateur Django à partir du modèle

Comment cliquer sur un élément de la liste de sélection avec le marionnettiste

Rapporteur: Comment cliquer sur le bouton dans la boîte de dialogue modale (élément angulaire)

comment restreindre certaines options dans une boîte de sélection à l'aide de Laratrust 5.2. *

Comment supprimer la boîte de sélection en pointillés sur les widgets?

Comment changer les options de la balise de sélection en javascript à l'aide de la console?

comment rendre les options à l'intérieur de la boîte de sélection angulaire

Comment cliquer sur la barre de navigation à l'aide du pilote Web sélénium

mettre à jour les options de la deuxième boîte de sélection en fonction des premières options de la boîte de sélection

Essayer de supprimer la boîte de sélection à l'aide de la fonction jQuery remove ()

Comment obtenir la valeur d'attribut à partir des options de la boîte de sélection

Comment afficher les données dans l'option de boîte de sélection à l'aide de jquery

Comment obtenir la clé d'une boîte de sélection multidimensionnelle à l'aide de jQuery

Comment afficher les div pertinents lors de la sélection d'options à l'aide de jquery?

JQUERY: remplissage de la boîte de sélection avec le groupe d'options à l'aide du fichier json

mise à jour de la boîte de sélection à l'aide d'ajax dans les rails

Cliquer sur tous les boutons à l'aide de la console

Comment afficher la boîte de dialogue de sélection de plage dans Excel à l'aide d'officejs

JS - Téléchargement par glisser-déposer - limitant les fichiers déplacés et permettant de cliquer sur la zone de dépôt pour ouvrir la boîte de dialogue de sélection des fichiers

Les valeurs sélectionnées dans la boîte de sélection multiple doivent être affichées dans la même page sans cliquer sur le bouton Soumettre

Ne pas afficher les options dans la boîte de sélection après les options maximales à l'aide de jquery

Impossible de cliquer sur le champ de texte dans la boîte de dialogue modale à l'aide de Selenium Python

TOP liste

chaudétiquette

Archive