如何从代码中获取当前url& phantomjs测试?

时间:2016-04-14 15:05:41

标签: php phantomjs codeception

我正在使用我的测试在estore中创建产品,并且需要在提交表单后获取URL。

提交按钮后,是否可以在测试范围中获取url

$I->click('#formSubmit');
$I->wait(5); // wait for redirect to new url
$url = $I->someFunctionToGetCurrentUrl()`

我从控制台运行此测试,而不是从Web浏览器运行,因此我无法访问服务器端的$ _​​SERVER。

但是如果我在代码框架中有一些像$I->canSeeCurrentUrlEquals()这样的方法,那么我应该能以某种方式访问​​当前的URL ...

怎么做?

3 个答案:

答案 0 :(得分:8)

解决方法是在_support / AcceptanceHelper.php文件中为AcceptanceHelper添加一个帮助方法:

    class AcceptanceHelper extends \Codeception\Module
    {

        /**
         * Get current url from WebDriver
         * @return mixed
         * @throws \Codeception\Exception\ModuleException
         */
        public function getCurrentUrl()
        {
            return $this->getModule('WebDriver')->_getCurrentUri();
        }

    }

然后在测试中使用它:

$url = $I->getCurrentUrl();

答案 1 :(得分:2)

如果您没有AcceptanceHelper / FunctionalHelper类(因此$ this-> getModule或$ this->客户端未定义),那么AcceptanceTester / FunctionalTester类中的以下内容应该有效:

public function getCurrentUrl() {
    return $this->executeJS("return location.href");
}

答案 2 :(得分:0)

您可以使用 CodeCeption 的 PhpBrowser 函数 grabFromCurrentUrl() 获取当前 URL。

https://codeception.com/docs/modules/PhpBrowser#grabFromCurrentUrl

此函数接受正则表达式以返回当前 URL 的特定部分,但也...

<块引用>

如果没有提供参数,则返回完整的 URI。

所以,像这样使用它

$uri = $I->grabFromCurrentUrl();