2015-11-26 3 views
1

Я пытаюсь написать сценарий для входа в facebook. Основываясь на некоторых учебниках, я написал это до сих пор.Невозможно войти в facebook с помощью Python & Selenium. send_keys() ничего не делает

Когда выполняется следующее, он просто запускает Firefox, отправляется на facebook.com и ждет там и просто терпит неудачу. Имя пользователя и пароль не введены, и кнопка входа в систему не будет нажата.

Что я могу делать неправильно? Я думаю, что мои Идентификаторы XPath верны, проверены с помощью Firepath. Любые намеки приветствуются.

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() 

ответ

0

Вы были близки!

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) 
1

Я сделал тот же тест, используя java. Возможно, вам захочется взглянуть на вашу ошибку.

// 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(); 
2

То, что вы сделали неправильно здесь, вы объявили селекторы как xpath и вы используете метод для поиска WebElement с использованием идентификатора.

Измените find_element_by_id на find_element_by_xpath, и ваша проблема будет решена.

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() 
+0

Если вы хотите продолжить использование 'find_element_by_id', передайте только идентификатор в качестве селектора. Например, для поля электронной почты это должно быть «driver.find_element_by_id (« email »)», а также для других. – Abhinav

Смежные вопросы