Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: driver.isElementPresent is not a function

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?

like image 533
jmreicha Avatar asked Sep 28 '16 01:09

jmreicha


2 Answers

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);
like image 107
Saurabh Gaur Avatar answered Nov 13 '22 11:11

Saurabh Gaur


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.

like image 22
Jason Livesay Avatar answered Nov 13 '22 12:11

Jason Livesay