TypeError: driver.isElementPresent is not a function

12,862

Solution 1

For consistency with the other Selenium language bindings, WebDriver#isElementPresent() and WebElement#isElementPresent() have been deprecated.

If you're using Selenium 3, you should try using findElements instead to determine element present or not as below :-

driver.findElements(By.id('email')).then(found => !!found.length);

Or if you want to wait until desire element present, you should try using webdriver.until as below :-

const until = webdriver.until;

var user = driver.wait(until.elementLocated(By.id('email')), timeout);
user.sendKeys(username);

Solution 2

Make sure that all of the dependencies like Selenium and the browser driver are installed and working using a very minimal example.

Then you can check what functions are on the driver object with console.log(util.inspect(driver));

If your dependencies are set up, it may be that the API changed slightly. The current example here https://www.npmjs.com/package/selenium-webdriver uses until. You may want to try something closer to that example first.

Share:
12,862
jmreicha
Author by

jmreicha

DevOps, SRE, Docker, Kubernetes, Python, automation. Blog: https://thepracticalsysadmin.com

Updated on June 18, 2022

Comments

  • jmreicha
    jmreicha almost 2 years

    I am attempting to write a node function that logs into a website and am having trouble getting it to work. I am trying to wait for the page to load using the isElementPresent function, referenced in this post but it doesn't seem to be working.

    Here's what I have so far:

    const webdriver = require('selenium-webdriver')
    const By = webdriver.By
    
    var username = ''
    var password = ''
    var timeout = 5000
    
    function FacebookLogin(username, password) {
    
        var driver = new webdriver.Builder()
            .withCapabilities(webdriver.Capabilities.chrome())
            .build()
    
        driver.get('http://www.facebook.com')
    
        driver.wait(function() {
            return driver.isElementPresent(By.id('email'))
        }, timeout)
    
        var user = driver.findElement(By.id('email'))
        user.sendKeys(username)
    
        var pass = driver.findElement(By.id('pass'))
        pass.sendKeys(password)
    
        pass.submit()
        driver.sleep(5000)
        driver.quit()
    }
    
    FacebookLogin(username, password)
    

    When I run the function though I receive the error TypeError: driver.isElementPresent is not a function. What is going on here and what am I missing?