Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to get current url from codeception & phantomjs test?

I am creating product in estore with my test, and need to get url after submitting a form.

Is it possible to get url in the test scope after submitting button ?

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

I am running this test from console, not from the web browser, so I don't have access to $_SERVER that is on the server's side.

But if I have some methods like $I->canSeeCurrentUrlEquals() in codeception framework then i should somehow be able to access current url...

how to do it?

like image 481
Ilja Avatar asked Apr 14 '16 15:04

Ilja


3 Answers

You can use CodeCeption's PhpBrowser function grabFromCurrentUrl() to get the current URL.

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

This function accepts regex to return a specific portion of the current URL, however also...

If no parameters are provided, the full URI is returned.

So, use it like this

$uri = $I->grabFromCurrentUrl();
like image 149
JamesG Avatar answered Oct 08 '22 10:10

JamesG


If you don't have an AcceptanceHelper/FunctionalHelper class (and so $this->getModule or $this->client are undefined) then the following in your AcceptanceTester/FunctionalTester class should work:

public function getCurrentUrl() {
    return $this->executeJS("return location.href");
}
like image 45
tschumann Avatar answered Oct 08 '22 10:10

tschumann


The solution was to add a helper method to AcceptanceHelper in _support/AcceptanceHelper.php file:

    class AcceptanceHelper extends \Codeception\Module
    {

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

    }

and then use it in test:

$url = $I->getCurrentUrl();
like image 11
Ilja Avatar answered Oct 08 '22 11:10

Ilja