Reputation: 9705
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
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
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
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