2017-07-04 1 views
1

BUTforme présente avec casperjs - nouvelle URL ne se charge pas

Ici, je suis en train de perfom une navigation de recherche de base sur le Pubmed website. Disons que le terme que je cherche est Hello. Ce que je m'attends à la fin est d'atterrir sur une page de résultats après avoir cliqué sur le bouton de recherche.

PROBLÈME

Le code soumis fonctionne parfaitement sur la console javascript du navigateur Chrome. Mais cela ne fonctionne pas à travers casperjs. L'URL actuelle semble rester la même. Je ne pouvais pas comprendre où est le problème.

Mon code

// USAGE: casperjs test navigation_test.js 

var config = { 
    url: 'https://www.ncbi.nlm.nih.gov/pubmed/', 
}; 

config.form = { 
    "term": "Hello", 
}; 

casper.test.begin('Testing navigation and forms', 2, function suite(test) { 
    test.comment('⌚ Loading ' + config.url + '...'); 


    casper.start(config.url, function() { 
    // adjust the view port 
    this.viewport(1280, 1024); 
    }); 

    // #1 method-2 (short) 
    casper.then(function() { 
    this.fill('form#EntrezForm', config.form, true); 
    }) 

    // #2 
    casper.then(function() { 
    test.assertUrlMatch(/term/, 'New location is ' + this.getCurrentUrl()); 
    }); 

    casper.run(function() { 
    test.done(); 
    }); 

}); 

code supplémentaire

Le #1 method dans le code ci-dessus est court. J'ai également essayé une version plus longue comme suit. Mais ça n'a pas marché non plus.

// #1 method-1 (long) 
casper.then(function() { 
    this.evaluate(function() { 
     $('term').value = "Hello" 
    }); 

    test.assertEvalEquals(function() { 
     return $('term').value; 
    }, "Hello", 'The search was filled out properly.'); 

    this.click('button[id="search"][type="submit"][class="button_search nowrap"]'); 
    // OR 
    // this.clickLabel('Search', 'button'); 
    // OR 
    /*this.evaluate(function() { 
    $('search').click(); 
    // OR 
    // document.getElementById('search').click(); 
    });*/ 

}); 
+0

Ce lien a fonctionné. https://stackoverflow.com/questions/24197587/casperjs-click-doesnt-load-new-html –

Répondre

1

Après avoir soumis un formulaire ou une nouvelle demande uri je ALWAYS utilise un des waitFor pour sélecteurs. Je remarque parfois que l'utilisation de .then échoue parfois.

Ceci passe bien (je aussi remarqué que votre match url était un peu mal)

var config = { 
    url: 'https://www.ncbi.nlm.nih.gov/pubmed/', 
}; 

config.form = { 
    "term": "Hello", 
}; 

casper.test.begin('Testing navigation and forms', 2, function suite(test) { 

    casper.start(config.url, function() { 
     this.viewport(1280, 1024); 
    }); 

    casper.then(function() { 
     test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI"); 
     this.fill('form#EntrezForm', config.form, true); 
    }); 

    //Changes made here! 
    casper.waitForText("Search results", function() { 
     test.assertUrlMatch(/pubmed\/\?term=Hello/, 
      'New location is ' + this.getCurrentUrl()); 
    }); 

    casper.run(function() { 
     test.done(); 
    }); 

}); 

enter image description here

MISE A JOUR ESSAYEZ CE

Ajouter une condition échoue et prendre une capture d'écran pour voir ce qui est arrivé (ou ce qui ne s'est pas produit)

casper.waitForText("Search results", function() { 
    test.assertUrlMatch(/pubmed\/\?term=Hello/, 
    'New location is ' + this.getCurrentUrl()); 
}, function() { 
    casper.capture("grab.png"); 
}); 

Vous pouvez également ajouter une chaîne d'agent utilisateur, directement au-dessous de la ligne casper.test

casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');  

Aussi, vous pouvez essayer d'augmenter le temps de sorte que ses plus de 5 secondes par exemple

casper.waitForText("Search results", function() { 
     test.assertUrlMatch(/pubmed\/\?term=Hello/, 
      'New location is ' + this.getCurrentUrl()); 
    }, null, 10000); 

MISE A JOUR ESSAYEZ CE AINSI - PLAN D'ENSEMBLE!

Essayez de remplacer par ce coede. Il devrait remplir le formulaire et le soumettre en même temps ...

casper.then(function() { 
    test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI"); 
    this.fillSelectors('form', { 
    "input[id='term']": "Hello" 
    }, true); 
}); 
+0

Surprenant comment le code ci-dessus ne fonctionne pas pour moi ... Je reçois l'erreur suivante. [capture d'écran d'erreur] (http://i.imgur.com/IytRsnh.jpg) –

+0

J'utilise 'casperjs 1.1.4',' phantomjs 2.1.1', 'nodejs v4.2.6' sur' Ubuntu 16.04.2' . Pour autant que je vois, je pense qu'il y a un problème avec l'exécution du bouton "Rechercher". Voici l'image de [grab.png] (http://i.imgur.com/gze6cop.png).À cette partie du code, la page devrait déjà avoir atterri aux «résultats de la recherche», mais ce n'est pas le cas. Voici maintenant la [erreur actuelle] (http://i.imgur.com/QoSBn33.jpg) ressemble à. –

+0

ont posté une autre mise à jour. Tout fonctionne très bien sur Windows :) – Rippo