I have searched on Google and the SO site and I get answers for JAVA but do not seem to get answers for node.js
I have a web app that takes time to load. I would like the selenium program to wait till the page is loaded and then perform some actions.
My current code is as follows
JavaScript
x
19
19
1
//dependencies
2
var webdriver = require('selenium-webdriver'),
3
util = require('util'),
4
_ = require('underscore');
5
6
var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
7
var branchName = _.isUndefined(process.argv[3]) ? 'branch' : process.argv[3],
8
hostName = _.isUndefined(process.argv[2]) ? 'localhost' : process.argv[2],
9
appTmpl = 'http://%s/%s',
10
username = 'xxxx',
11
password = 'xxxx';
12
var appUrl = util.format(appTmpl, hostName, branchName);
13
14
driver.get(appUrl);
15
driver.findElement(webdriver.By.name("username")).sendKeys(username);
16
driver.findElement(webdriver.By.name("password")).sendKeys(password);
17
driver.findElement(webdriver.By.name("login_button")).click();
18
driver.quit();
19
The error I get is:
JavaScript
1
28
28
1
C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverpromise.js:1643
2
throw error;
3
^
4
NoSuchElementError: no such element
5
(Session info: chrome=37.0.2062.103)
6
(Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64)
7
at new bot.Error (C:Workstudyseleniumnode_modulesselenium-webdriverlibatomserror.js:109:18)
8
at Object.bot.response.checkResponse (C:Workstudyseleniumnode_modulesselenium-webdriverlibatomsresponse.js:106:9)
9
at C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverwebdriver.js:277:20
10
at C:Workstudyseleniumnode_modulesselenium-webdriverlibgoogbase.js:1243:15
11
at webdriver.promise.ControlFlow.runInNewFrame_ (C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverpromise.js:1539:20)
12
at notify (C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverpromise.js:362:12)
13
at notifyAll (C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverpromise.js:331:7)
14
at resolve (C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverpromise.js:309:7)
15
at fulfill (C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverpromise.js:429:5)
16
at C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverpromise.js:1406:10
17
==== async task ====
18
WebDriver.findElement(By.name("username"))
19
at webdriver.WebDriver.schedule (C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverwebdriver.js:268:15)
20
at webdriver.WebDriver.findElement (C:Workstudyseleniumnode_modulesselenium-webdriverlibwebdriverwebdriver.js:711:17)
21
at Object.<anonymous> (C:Workstudyseleniumtest.js:15:8)
22
at Module._compile (module.js:456:26)
23
at Object.Module._extensions..js (module.js:474:10)
24
at Module.load (module.js:356:32)
25
at Function.Module._load (module.js:312:12)
26
at Function.Module.runMain (module.js:497:10)
27
at startup (node.js:119:16)
28
Advertisement
Answer
I stumbled upon an answer to my question
So to wait for an element to appear we have to:
JavaScript
1
4
1
driver.wait(function () {
2
return driver.isElementPresent(webdriver.By.name("username"));
3
}, timeout);
4