PHPBrowser隐藏的API方法“_loadPage”不遵循301重定向

时间:2017-05-19 22:04:33

标签: redirect codeception

我在Codeception v2.2.11中使用PHPBowser编写了一个使用_loadpage的隐藏API方法的测试。

我已将此添加到我的\ Helper \ Api中,如下所示:

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不要停在〜/ contact但是按照301重定向到〜/ contact-us,所以我可以得到输出头响应

[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

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法:

问题始于,因为我怀疑_loadpage不遵循重定向,它只加载请求的页面并停止。在这种情况下'〜/ contact-us',忽略了页面被重定向到(301)到'〜/ contact-us'的事实。

我无法简单地加载页面(通过_loadpage) 获取标头响应 并假设我将获得重定向URL的标头响应 我只会得到原始网址的标题回复。

解决方案: 我必须在我的foreach循环中:

  1. 转到网址
  2. 发送GET
  3. 抓住HTTP标头
  4. 断言HTTP标头有200OK响应
  5. 解决方案 - 与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);
        }
    }