我正在尝试编写一个脚本来登录facebook。根据一些教程,我已经写了这个。
执行以下操作时,它只会启动Firefox,转到facebook.com并等待那里,然后失败。用户名和密码不会输入,登录按钮也不会被点击。
我可能做错了什么?我认为我的XPath ID是正确的,用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 = "myemail@gmail.com"
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 :(得分:2)
您在这里做错了,您已将选择器声明为xpath
,并且您正在使用该方法搜索使用ID的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 = "myemail@gmail.com"
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()
答案 1 :(得分: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 :(得分: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)