user1406716
user1406716

Reputation: 9705

Unable to log in to facebook using Python & Selenium. send_keys() not doing anything

I am trying to write a script to login to facebook. Based on some tutorials, I have written this so far.

When the following is executed, it just launches Firefox, goes to facebook.com and waits there and just fails. The username and password dont get entered and the login button doesnt get clicked.

What could I be doing wrong? I think my XPath Ids are correct, checked with Firepath. Any hint is appreciated.

from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    import unittest

    class LoginTest(unittest.TestCase):

        def setUp(self):
            self.driver = webdriver.Firefox()
            self.driver.get("https://www.facebook.com/")

        def test_Login(self):
            driver = self.driver
            fbUsername = "[email protected]"
            fbPassword = "mypassword"
            emailFieldID = ".//*[@id='email']"
            passFieldID = ".//*[@id='pass']"
            loginButtonXPath = ".//input[@value='Log In']"
            flLogoXpath = "(//a[contains(@href, 'logo')])[1]"


            emailFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(emailFieldID))
            passFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(passFieldID))
            loginButtonElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(loginButtonXPath))

            emailFieldElement.click()
            emailFieldElement.clear()
            emailFieldElement.send_keys(fbUsername)

            passFieldElement.click()
            passFieldElement.clear()
            passFieldElement.send_keys(fbPassword)
            loginButtonElement.click()
            WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(flLogoXpath))


        def tearDown(self):
            self.driver.quit()



    if __name__ == '__main__':
        unittest.main()

Upvotes: 1

Views: 1785

Answers (3)

user3434449
user3434449

Reputation:

You were close!

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("https://facebook.com")

email = "email"
password = "pass"
login="loginbutton"
emailelement = driver.find_element_by_name(email)
passwordelement = driver.find_element_by_name(password)
emailelement.send_keys("USERNAME")
passwordelement.send_keys("PASSWORD")
loginelement = driver.find_element_by_id(login)

Upvotes: 0

Abhinav
Abhinav

Reputation: 1042

What you have done wrong here is, you have declared the selectors as xpath and you are using the method to search for the WebElement using id.

Change the find_element_by_id to find_element_by_xpath and your problem would be solved.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest

class LoginTest(unittest.TestCase):
    def setUp(self):
    self.driver = webdriver.Firefox()
        self.driver.get("https://www.facebook.com/")

    def test_Login(self):
        driver = self.driver
        fbUsername = "[email protected]"
        fbPassword = "mypassword"
        emailFieldID = ".//*[@id='email']"
        passFieldID = ".//*[@id='pass']"
        loginButtonXPath = ".//input[@value='Log In']"
        flLogoXpath = "(//a[contains(@href, 'logo')])[1]"

        emailFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(emailFieldID))
        passFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(passFieldID))
        loginButtonElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(loginButtonXPath))

        emailFieldElement.click()
        emailFieldElement.clear()
        emailFieldElement.send_keys(fbUsername)

        passFieldElement.click()
        passFieldElement.clear()
        passFieldElement.send_keys(fbPassword)
        loginButtonElement.click()
        WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(flLogoXpath))


    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

Upvotes: 2

Shah
Shah

Reputation: 423

I have done the same test using java. You might want to take a look to find your error.

// Creates a driver object for firefox
    WebDriver driver_xpath = new FirefoxDriver();

    // Goto page
    driver_xpath.get(Address);
    // email box-->email address-->click
    driver_xpath.findElement(By.xpath(".//*[@id='email']")).sendKeys(UserID);
    // password box-->password-->click
    driver_xpath.findElement(By.xpath(".//*[@id='pass']")).sendKeys(Password);
    // login button-->click
    driver_xpath.findElement(By.xpath(".//*[@id='loginbutton']")).click();
    // Navigation drop button-->click
    driver_xpath.findElement(By.xpath(".//*[@id='userNavigationLabel']")).click();
    //Waits for the drop down menu to show
    driver_xpath.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    // logout button-->click
    driver_xpath.findElement(By.xpath("//li[12]/a/span/span")).click();
    //Close
    driver_xpath.close();

Upvotes: 1

Related Questions