2016-04-14 97 views
6

我正在用我的测试在estore中创建产品,并且需要在提交表单后获取网址。如何从codeception&phantomjs测试中获取当前网址?

提交按钮后可否在测试范围中获得url

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

我从控制台运行此测试,而不是从网络浏览器,所以我不能够访问$ _ SERVER是在服务器端。

但是,如果我有codeception框架的一些方法,如$I->canSeeCurrentUrlEquals()的话,我应该以某种方式能够访问当前网址...

怎么办呢?

+1

你是什么意思“在测试范围”? –

+0

我从控制台运行此测试,而不是从Web浏览器运行,所以我没有访问服务器端的$ _​​SERVER。但是,如果我在代码框架中有''I-> canSeeCurrentUrlEquals()''这样的方法,那么我应该能够访问当前的url ...怎么做?这是个问题... –

+0

请编辑您的问题以包含此附加信息。 – buczek

回答

6

的解决方案是一个辅助方法在_support添加到AcceptanceHelper/AcceptanceHelper.php文件:

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

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

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

需要进行哪些编辑? – tschumann