在Codeception

时间:2016-08-09 15:51:42

标签: selenium codeception

使用PHP Codeception和WebDriver PHP包装器(Facebook),通常可以获取PhantomJS或真实浏览器所使用的实际页面请求的环境变量吗?

也许这只是我对验收测试背后的技术的误解,但考虑到像Codeception这样的测试框架正在使用PhantomJS或像Chrome或Firefox这样的真实浏览器请求页面,我希望能够访问例如$ _SERVER全局变量。不幸的是,在WebDriver Codeception模块或Facebook PHP WebDriver包装器中找不到任何方法。

具体来说,我有一个应该只使用SSL的页面,因此在访问页面时预计会发生301重定向。 我需要在Codeception中有一个验收测试用例来检查它并检查$ _SERVER ['HTTPS']全局变量应该这样做。

首先,我尝试将URL与“https://”匹配,但WebDriver包装器方法_getCurrentUrl()仅提供没有协议和主机的URI部分。

然后我尝试在自定义Helper操作中获取$ _SERVER变量,但是直接访问的变量看起来像是来自CLI环境,而不是浏览器请求。

2 个答案:

答案 0 :(得分:2)

如果已经使用过WebDriver模块:

$currentUrl = $I->executeJS('return jQuery(location).attr("href");');

答案 1 :(得分:1)

不,您无法在验收测试中访问$ _SERVER,因为$ _SERVER位于服务器端,您所拥有的只是客户端。

如果要检查完整的URL,可以使用webdriver实例的getCurrentURL方法,可以使用与帮助程序中的_getCurrentUri方法相同的方式访问它。

public function checkUrl()
{
  $url = $this->getModule('WebDriver')->webDriver->getCurrentURL();
  //do your checks here
}