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

Posted

技术标签:

【中文标题】如何从 codeception & phantomjs 测试中获取当前 url?【英文标题】:how to get current url from codeception & phantomjs test? 【发布时间】:2016-08-06 05:48:36 【问题描述】:

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

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

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

我是从控制台运行此测试,而不是从 Web 浏览器,所以我无权访问服务器端的 $_SERVER。

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

怎么做?

【问题讨论】:

“在测试范围内”是什么意思? 我是从控制台运行此测试,而不是从 Web 浏览器,所以我无权访问服务器端的 $_SERVER。但是,如果我在 codeception 框架中有一些方法,如 $I->canSeeCurrentUrlEquals(),那么我应该能够以某种方式访问​​当前的 url ......怎么做?这就是问题... 请编辑您的问题以包含此附加信息。 【参考方案1】:

解决方案是在 _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();

【讨论】:

我只得到 URI/URL 的路径部分,而不是完整的东西(包括 http)。 我希望它对某人有用,用协议等获取完整的 URL。用这个替换 return 语句:return $this->getModule('WebDriver')->_getUrl().$this- >getModule('WebDriver')->_getCurrentUri();【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

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

所以,像这样使用它

$uri = $I->grabFromCurrentUrl();

【讨论】:

以上是关于如何从 codeception & phantomjs 测试中获取当前 url?的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过 Codeception cest 测试

如何从codeception和phantomjs测试中获取当前url?

PHA是什么-如何获取Pha矿机

Composer 更新 codeception - phpunit 不更新

如何阻止 codeception/selenium 在断言失败时关闭浏览器窗口?

从 codeception 对象访问数组值