2017-08-09 1 views
1

Basé sur Alvin Bunk article link to article Je veux créer un Web-Cralwer qui se connecte dans un site Web puis soumet un formulaire. Mon problème est que sur ce site il y a un bloc Ajax qui génère après avoir cliqué et un lien vide quelques entrées que j'ai besoin de remplir donc j'ai besoin de cliquer sur ce lien vide d'une façon ou d'une autre pour insérer les entrées manuellement.Traiter le bloc AJAX dans le Web-crawler ou créer manuellement des entrées

j'ai changé le code ci-dessous dans beaucoup de façons d'essayer de le faire fonctionner, mais la fonction de visite je me suis coincé

Je reçois Uncaught Erreur: Appel à sur null

une visite de fonction membre()
<?php 
require 'vendor/autoload.php'; 

trait MinkSetup 
{ 
    private $minkBaseUrl; 
    private $minkSession; 

    /** 
    * @before 
    */ 
    public function setupMinkSession() 
    { 
     $this->minkBaseUrl = 'https://www.url.com'; 
     $driver = new \Behat\Mink\Driver\Selenium2Driver('firefox'); 
     $this->minkSession = new \Behat\Mink\Session($driver); 
     $this->minkSession->start(); 
    } 

    public function getCurrentPage() 
    { 
     return $this->minkSession->getPage(); 
    } 

    public function getCurrentPageContent() 
    { 
     return $this->getCurrentPage()->getContent(); 
    } 

    public function visit($url) 
    { 
     echo $url; 
     $this->minkSession->visit($url); 
    } 

    public function login($user, $pass){ 
     $this->minkSession->visit('complete url'); 
     $page = $this->getCurrentPage(); 
     echo $page; 
     $page->fillField('email', $user); // Enter username. 
     $page->fillField('password', $pass); // Enter password. 
     $page->pressButton('Login'); 

     $content = $this->getCurrentPageContent(); 
     $this->assertContains('logout', $content); 
    } 

    /** 
    * @afterClass 
    */ 
    public function logout(){ 
     $page = $this->getCurrentPage(); 
     $page->clickLink('logout'); 
    } 
} 
use PHPUnit\Framework\TestCase; 


class MinkPetitionTest extends TestCase 
{ 
    use MinkSetup; 

    public function testSubmitPage(){ 
     $this->login('user', 'pw'); // Login first. 

     $this->visit('full url'); 
     $page = $this->getCurrentPage(); // Get the page. 
     echo $page; 
     $page->fillField('form_ban_id', '1234'); 
     $page->pressButton('form_find_student'); 

     $content = $this->getCurrentPageContent(); // Get page content. 
     $this->assertContains('<u>No Petitions</u> exist for Some User Student ID: 1234', $content); 
    } 
} 



$client = new MinkPetitionTest(); //tried to get something to work 
$client->testSubmitPage(); //same here 
+0

Je mis à jour mon article Vison avec les changements nécessaires pour les changements de PHPUnit. –

+0

Salut le roi. Avez-vous une copie de votre code AJAX quelque part? J'ai un projet Mink prêt à vérifier dans github bientôt, cependant, l'intérêt d'utiliser Mink est à cause de Javascript ou AJAX; donc j'ai besoin de comprendre quel code vous utilisez. Vous pouvez également le publier sur pastebin et copier l'URL. –

Répondre

0

vous devez changer votre classe de test comme si vous utilisez la dernière phpunit:

... 
use PHPUnit\Framework\TestCase; 

class MinkPetitionTest extends TestCase 
{ 
    ... 

Pouvez-vous essayer d'abord et voir le r esult?


EDIT # 2

En outre, votre fichier trait est incorrect. il devrait être:

trait MinkSetup 
{ 
    private $minkBaseUrl; 
    ... 

    public function visit($url) 
    { 
     $this->minkSession->visit($this->minkBaseUrl . $url); 
    } 
    ... 

Essayez que

+0

Même erreur non interceptée: Appel à une fonction membre visit() sur null dans la fonction de visite, j'ai mis à jour le code –

+0

Avez-vous entré le code incorrectement? Vous avez '$ this-> visit (full url ');' mais les paramètres doivent être cités, comme ceci: '$ this-> visit (' full url ');'. Voir mon EDIT # 2 sur le fichier de traits. Assurez-vous de copier le code conformément à mon didacticiel. Il devrait y avoir quelques changements mineurs. –

+0

Je viens de faire un exemple avec url complète, le lien est correct, la fonction de visite ne fonctionne pas, a également changé pour utiliser le const privé, mais la visite sera toujours sur null pour une raison quelconque –