2017-08-09 36 views
1

基於Alvin Bunk文章link to article我想創建一個web-cralwer,它登錄到一個網站然後提交一個表單。處理網頁爬蟲中的AJAX塊或創建手動輸入

我的問題是,在該網站上有一個Ajax塊,在單擊和空鏈接後生成一些輸入,我需要填寫,所以我需要點擊某個空鏈接或手動插入輸入。

我改變了下面的代碼在很多方面,試圖使其工作,但對訪問功能我被困

我得到未捕獲的錯誤:空

調用一個成員函數訪問()
<?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

我更新了我與PHPUnit的變化所需的改變水貂文章。 –

+0

嗨,國王。你有沒有你的AJAX代碼的副本?我已經有了一個Mink項目,可以很快檢查到github,但是,使用Mink的全部重點都是因爲Javascript或AJAX;所以我需要了解你使用的是什麼代碼。您也可以將其發佈到pastebin並複製該網址。 –

回答

0

你需要,如果你使用的是最新的PHPUnit來改變你的測試類,像這樣:

... 
use PHPUnit\Framework\TestCase; 

class MinkPetitionTest extends TestCase 
{ 
    ... 

你能嘗試的第一和看到將R esult?


編輯#2

另外,你的特質文件不正確。它應該是:

trait MinkSetup 
{ 
    private $minkBaseUrl; 
    ... 

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

試一下

+0

相同的未捕獲錯誤:在訪問函數中調用成員函數visit()null,我更新了代碼 –

+0

您是否錯誤地輸入了代碼?你有'$ this-> visit(full url');'但是參數應該被引用,像這樣:'$ this-> visit('full url');'。查看我的編輯#2關於特質文件。確保您按照我的教程複製代碼。應該有一些小的改變。 –

+0

我剛剛做了一個完整的URL的例子,鏈接是正確的,訪問功能不起作用,也改爲使用私人常量,但由於某種原因訪問將始終爲空 –