2017-05-19 16 views
0

我正在使用隱藏的API方法_loadpage在Codeception v2.2.11中使用PHPBowser編寫測試。PHPBrowser隱藏的API方法「_loadPage」不在301重定向

我已經加入到這個我\輔助\阿比如下:

public function loadpage($link) 
    { 
     $this->getModule('PhpBrowser')->_loadPage('POST', $link); 

    } 

,並調用它在API Codeception測試,如下:

$link = 'http://www.fiercebiotech.com/contact'; 
$I->loadpage($link); 

我現在面臨的問題是,當使用_loadpage時,它不遵循重定向。這個exampled鏈接最終解決時是301重定向到: http://www.fiercebiotech.com/contact-us

以下是_loadpage打開$link時的標題響應控制檯輸出。

I loadpage "http://www.fiercebiotech.com/contact" 
    [Request Headers] [] 
    [Page] http://www.fiercebiotech.com/contact 
    [Response] 404 

我需要幫忙_loadpage在〜/接觸不會停止,但按照301重定向到〜/接觸我們,這樣我就可以拿到輸出頭響應是

[page] http://www.fiercebiotech.com/contact-us 
[response] 200 

目前我不能得到_loadpage遵循301重定向。那裏的人有成功嗎?

我試圖使用Codeception REST函數startFollowingRedirects並添加allow_redirects: true如下,但這兩種技術似乎都不起作用(因爲沒有遵循重定向)。

class_name: ApiTester 
modules: 
    enabled: 
     - WebDriver: 
      url: '' 
      browser: 'chrome' 
      window_size: 1200x993 
      clear_cookies: true 
      allow_redirects: true 
     - \Helper\Acceptance 
     - REST: 
      url: 'host' 
      depends: PhpBrowser 
      allow_redirects: true 
     - \Helper\Api 
+0

你的問題是,你得到404個狀態,而不是301 – Naktibalda

+0

謝謝@Naktibalda你的迴應。 問題是,如果我在Chrome中訪問鏈接〜/聯繫人(因爲它在源代碼中),當它到達〜/ contact-us的最終目的地時,鏈接將解析爲301。 作爲該視頻搶看出 - https://www.screencast.com/t/B0qs8c8v 這裏是標頭響應我從Chrome中得到: '狀態代碼\t URL \t IP \t頁類型\t重定向類型\t重定向URL \t http://www.fiercebiotech.com/contact \t 54.225.158.254 \t server_redirect \t永久\t http://www.fiercebiotech.com/contact-us http://www.fiercebiotech.com/聯繫我們\t 54.225.158.254 \t正常\t無\t沒有' – EAQA

回答

0

我找到了解決我的問題:

問題開始,我懷疑是_loadpage不遵循重定向,它只是加載頁面請求,並停止。在這種情況下,'〜/ contact-us',忽略頁面被重定向到(〜301)到'〜/ contact-us'的事實。

我不能簡單地加載頁面(通過_loadpage) 獲取標頭響應 並假設我會得到重定向的URL 的標頭響應我只會得到原始URL的標頭響應。

解決方案: 我要在我的foreach循環:

  1. 轉到URL
  2. 發送GET
  3. 抓住HTTP頭
  4. 斷言HTTP頭有a 200OK迴應

解決方案 - 因爲它是在Codeception代碼:

public function Validate_httpStatus_mainNav($mainNavLocator) 
{ 
    //Used to test main navigation -- 404 tests 
    $I = $this; 
    $mainNavLinks = $I->grabMultiple($mainNavLocator, 'href'); 
    codecept_debug($mainNavLinks); 
    foreach ($mainNavLinks as $link) { 
     $I->amOnUrl($link); 
     $I->sendGET($link); 
     $I->grabHttpHeader($link); 
     $I->canSeeResponseCodeIs(HttpCode::OK); 
    } 
}