I have a very simple form: you enter a first name and a last name, click submit, it displays the full name. I wrote a simple test for this form using Selenium Webdriverjs. It works with chrome, but not with phantomjs. Am I missing any trick to make it work with phantomjs? I am using phantomjs version 2.0.0.
Here's the test code:
var webdriver = require('selenium-webdriver');
var test = require('selenium-webdriver/testing');
var assert = require('assert');
var By = webdriver.By;
test.describe('Name Form', function() {
var browser;
test.beforeEach(function() {
browser = new webdriver.Builder()
.forBrowser('phantomjs')
.build();
});
test.afterEach(function() {
browser.quit();
});
test.it('should display the entered name when the Submit button is clicked', function() {
// The simplified approach below of calling Webdriver methods works because of
// the Promise Manager (see https://code.google.com/p/selenium/wiki/WebDriverJs#Control_Flows)
browser.get('http://localhost:8080');
// Enter firstName, lastName and click submit
browser.findElement(By.id('firstName')).sendKeys('Naresh');
browser.findElement(By.id('lastName')).sendKeys('Bhatia');
browser.findElement(By.id('submitButton')).click();
// Take a screen shot right after the click - it shows that display name has not appeared
browser.takeScreenshot().then(function(image) {
require('fs').writeFile('./screenshot-1.png', image, 'base64');
});
// Wait for displayName to be populated
browser.wait(function() {
return browser.findElement(By.id('displayName')).getText()
.then(function(displayName) {
if (displayName.length > 0) {
assert.equal(displayName, 'Naresh Bhatia');
return true;
}
else {
return false;
}
});
}, 20000);
});
});
Here's the error:
Name Form
1) should display the entered name when the Submit button is clicked
0 passing (1s)
1 failing
1) Name Form should display the entered name when the Submit button is clicked:
AssertionError: '' == 'Naresh Bhatia'
+ expected - actual
+Naresh Bhatia
at test/nameFormTest.js:49:24
at Array.forEach (native)
From: Task: Name Form should display the entered name when the Submit button is clicked
at Array.forEach (native)
EDIT
Note there is no page change on submit of the form. There is a JavaScript function that changes the diplayName element:
$(document).ready(function() {
$('#submitButton').click(function(e) {
e.preventDefault();
$('#displayName').text($('#firstName').val() + ' ' + $('#lastName').val());
});
});