Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium WebDriver wait till element is displayed

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) 
like image 800
Anand Sunderraman Avatar asked Sep 09 '14 20:09

Anand Sunderraman


People also ask

How do you wait until all element are loaded in Selenium?

There are three ways to implement Selenium wait for page to load: Using Implicit Wait. Using Explicit Wait. Using Fluent Wait.

How do you wait until an element is clickable on a website?

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).

Which of the following waits for the element to appear?

1 Answer. In any software web application's web driver test case, you can easily wait for the presence of element using IMPLICIT WAIT.

How do I make Selenium wait 10 seconds?

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.


1 Answers

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); 
like image 173
Anand Sunderraman Avatar answered Oct 01 '22 11:10

Anand Sunderraman