I had an issue on this old legacy site in work where I was writing a basic acceptance test where it clicks all the links in the top section of the home page. The problem was that one of the links opened another window using JavaScript. So I had to reconfigure Codeception to get it running.
There are various different drivers that codeception uses, PhpBrowser which doesn’t do JS, Selenium WebDriver does, and you have several options; you could install Selenium, chrome headless browser, or phantomjs. I chose phantomjs, as it was easiest (for me) to get up and running on a non X Server.
First up, you’ll need phantomjs. Go download it, unpack the zip, move the folder somewhere, and then symlink the bin/phantomjs to /usr/bin/phantomjs.
Next, launch phantomjs like so:
phantomjs --webdriver=4444 --ignore-ssl-errors=true --ssl-protocol=any
Now, in your YAML:
# Codeception Test Suite Configuration
# suite for acceptance tests.
# Run the following command FIRST:
# phantomjs --webdriver=4444 --ignore-ssl-errors=true --ssl-protocol=any
# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES.
class_name: WebGuy
modules:
enabled:
- WebDriver
- WebHelper
config:
WebDriver:
url: 'https://USER:PASS@YOUR_URL_HERE'
browser: phantomjs
capabilities:
acceptSslCerts: true
If you have a site using HTTP Basic Auth, put USER:PASSWORD@ in yopur URL, if not, remove it.
Now in your acceptance test, you can write:
$i->click('Nouvel abonnement');
$i->switchToWindow('webformswin');
Note that, in your Javascript, when you run the open window function, you specify a name. This is the name you use, and not the title from the HTML <head> section!
And there you have it! We can now test with javascript functionality!