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
//dependencies var webdriver = require('selenium-webdriver'), util = require('util'), _ = require('underscore'); var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build(); var branchName = _.isUndefined(process.argv[3]) ? 'branch' : process.argv[3], hostName = _.isUndefined(process.argv[2]) ? 'localhost' : process.argv[2], appTmpl = 'http://%s/%s', username = 'xxxx', password = 'xxxx'; var appUrl = util.format(appTmpl, hostName, branchName); driver.get(appUrl); driver.findElement(webdriver.By.name("username")).sendKeys(username); driver.findElement(webdriver.By.name("password")).sendKeys(password); driver.findElement(webdriver.By.name("login_button")).click(); driver.quit();
The error I get is:
C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:1643 throw error; ^ NoSuchElementError: no such element (Session info: chrome=37.0.2062.103) (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64) at new bot.Error (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\atoms\error.js:109:18) at Object.bot.response.checkResponse (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\atoms\response.js:106:9) at C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:277:20 at C:\Work\study\selenium\node_modules\selenium-webdriver\lib\goog\base.js:1243:15 at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:1539:20) at notify (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:362:12) at notifyAll (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:331:7) at resolve (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:309:7) at fulfill (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:429:5) at C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:1406:10 ==== async task ==== WebDriver.findElement(By.name("username")) at webdriver.WebDriver.schedule (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:268:15) at webdriver.WebDriver.findElement (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:711:17) at Object.<anonymous> (C:\Work\study\selenium\test.js:15:8) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16)
There are three ways to implement Selenium wait for page to load: Using Implicit Wait. Using Explicit Wait. Using Fluent Wait.
Wait until the element's . Displayed property is true (which is essentially what visibilityOfElementLocated is checking for). Wait until the element's . Enabled property is true (which is essentially what the elementToBeClickable is checking for).
1 Answer. In any software web application's web driver test case, you can easily wait for the presence of element using IMPLICIT WAIT.
We can make Selenium wait for 10 seconds. This can be done by using the Thread. sleep method. Here, the wait time (10 seconds) is passed as a parameter to the method.
I stumbled upon an answer to my question
So to wait for an element to appear we have to:
driver.wait(function () { return driver.isElementPresent(webdriver.By.name("username")); }, timeout);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With