title: Selenium WebDriver wait till element is displayed
body: <p>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</p>
  <p>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.</p>
  <p>My current code is as follows</p>
  <pre class="lang-js prettyprint-override"><code>//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(&quot;username&quot;)).sendKeys(username);
  driver.findElement(webdriver.By.name(&quot;password&quot;)).sendKeys(password);
  driver.findElement(webdriver.By.name(&quot;login_button&quot;)).click();
  driver.quit();
  </code></pre>
  <p>The error I get is:</p>
  <pre><code>    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(&quot;username&quot;))
      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.&lt;anonymous&gt; (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)
  </code></pre>