Search code examples
phpmacosseleniumselenium-chromedrivercodeception

Codeception See and Click functions Error out with Selenium running ChromeDriver


I am writing codeception tests with selenium running chrome driver for my local env, which is MacOS, running valet+. I am having issue of getting an error when I try to call methods like see() or click(). However other functions like seeInSource(), executeJS() and grabPageSource() are working fine.

For Example:

$I->see('Go to au site'); //Errors out

while

$I->seeInSource('Go to au site') // works fine

My acceptance.suite.yml is as following.

actor: AcceptanceTester
modules:
    enabled:
        # - PhpBrowser:
        #     url: http://npr.test/
        - WebDriver:
            url: http://npr.test/
            browser: chrome
            capabilities:
                chromeOptions:
                    w3c: true
                goog:chromeOptions:
                    w3c: true
        - \Helper\Acceptance
extensions:
    enabled:
        - Codeception\Extension\RunProcess:
            - chromedriver
step_decorators: ~ 

The Error I am getting when I use see or click

php vendor/bin/codecept run acceptance --steps
Codeception PHP Testing Framework v4.1.21
Powered by PHPUnit 8.5.16 by Sebastian Bergmann and contributors.

Acceptance Tests (1) -------------------------------------------------------------------------------------------------------------------------

  [RunProcess] Starting chromedriver
LandingPageCest: Landing page test
Signature: LandingPageCest:landingPageTest
Test: tests/acceptance/LandingPageCest.php:landingPageTest
Scenario --
 I am on url "http://npr.test"
 I am on page "/"
 I see "Go to au site"
 ERROR 

----------------------------------------------------------------------------------------------------------------------------------------------
  [RunProcess] Stopping chromedriver


Time: 6.38 seconds, Memory: 10.00 MB

There was 1 error:

---------
1) LandingPageCest: Landing page test
 Test  tests/acceptance/LandingPageCest.php:landingPageTest
                                                                                                                          
  [PHPUnit\Framework\Exception] Undefined index: ELEMENT at vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:228  
                                                                                                                          

Scenario Steps:

 3. $I->see("Go to au site") at tests/acceptance/LandingPageCest.php:16
 2. $I->amOnPage("/") at tests/acceptance/LandingPageCest.php:15
 1. $I->amOnUrl("http://npr.test") at tests/acceptance/LandingPageCest.php:14

#1  /Users/techlead/Projects/npr-testing/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:228
#2  Codeception\Module\WebDriver->see
#3  /Users/techlead/Projects/npr-testing/tests/_support/_generated/AcceptanceTesterActions.php:329
#4  /Users/techlead/Projects/npr-testing/tests/acceptance/LandingPageCest.php:16
#5  LandingPageCest->landingPageTest
Artifacts:

Png: /Users/techlead/Projects/npr-testing/tests/_output/LandingPageCest.landingPageTest.fail.png
Html: /Users/techlead/Projects/npr-testing/tests/_output/LandingPageCest.landingPageTest.fail.html

ERRORS!
Tests: 1, Assertions: 0, Errors: 1.

Also I have looked at issue Codeception: $i->see(text) but not $i->click(text) That didn't help me as I am setting my wc3 as true, and if I set it as false my selenium fails to start session.


Solution

  • So after trying a few things what worked for me was to replace my facebook/webdriver to php-webdriver. So my composer json looks like.

    {
        "require": {
            "php-webdriver/webdriver": "^1.11"
        },
        "require-dev": {
            "codeception/codeception": "^4.1",
            "codeception/module-phpbrowser": "^1.0.0",
            "codeception/module-asserts": "^1.0.0",
            "codeception/module-webdriver": "^1.2"
        }
    }
    

    Run the follwoing commands on your console to add php-driver and remove facebook/webdriver

    composer require php-webdriver/webdriver

    composer remove facebook/webdriver