2015-07-27 3 views
2

im new для python и selenium вообще, и я пытался пример, который я видел в youtube. это пример кода:raise TimeoutException (message, screen, stacktrace) TimeoutException: Message:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import WebDriverWait 
import unittest 

class LoginTest(unittest.TestCase): 

def test_Login(self): 
    self.driver = webdriver.Firefox() 
    self.driver.get("https://www.facebook.com/") 
    driver = self.driver 
    facebookUsername = "xxxxxxxx" 
    facebookPassword = "xxxxxxxx" 

    emailFieldId="email" 
    passFieldId ="pass" 
    loginButtonXpath="//input[@value='Log in']" 
    fbLogoXpath = "(//a[contains(@href,'logo')])[1]" 

    emailFieldElement = WebDriverWait(driver, 1).until(lambda driver: driver.find_element_by_id(emailFieldId)) 
    passFieldElement = WebDriverWait(driver, 1).until(lambda driver: driver.find_element_by_id(passFieldId)) 
    loginButtonElement = WebDriverWait(driver, 1).until(lambda driver: driver.find_element_by_id(loginButtonXpath)) 

    emailFieldElement.clear() 
    emailFieldElement.send_keys(facebookUsername) 
    passFieldElement.clear() 
    passFieldElement.send_keys(facebookPassword) 
    loginButtonElement.click() 
    WebDriverWait(driver, 1).until(lambda driver:  driver.find_element_by_id(fbLogoXpath)) 
def tearDown(self): 
    self.driver.quit() 

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

когда я запускаю код он входит в facebook, но останавливается и дает мне эту ошибку.

ERROR: test_Login (__main__.LoginTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "facebot.py", line 25, in test_Login 
    loginButtonElement = WebDriverWait(driver, 1).until(lambda driver: driver.find_element_by_id(loginButtonXpath)) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\support\wait.py", line 76, in until 
    raise TimeoutException(message, screen, stacktrace) 
TimeoutException: Message: 
Stacktrace: 
    at FirefoxDriver.prototype.findElementInternal_ (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/fxdriv 
[email protected]/components/driver-component.js:10667) 
    at FirefoxDriver.prototype.findElement (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/[email protected] 
code.com/components/driver-component.js:10676) 
    at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/fxdrive 
[email protected]/components/command-processor.js:12643) 
    at DelayedCommand.prototype.executeInternal_ (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/[email protected] 
googlecode.com/components/command-processor.js:12648) 
    at DelayedCommand.prototype.execute/< (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/[email protected] 
ode.com/components/command-processor.js:12590) 

---------------------------------------------------------------------- 
Ran 1 test in 16.262s 

я попробовал фиксируя его, глядя на YouTube, но им застрял и не знаю, что это могло быть.

+0

Похоже, что это приурочено. – Kupiakos

ответ

3

Для начала значение таймаута слишком мало, увеличьте его. Кроме того, вы можете определить экземпляр WebDriverWait только один раз и повторное использование:

wait = WebDriverWait(driver, 10) 

emailFieldElement = wait.until(lambda driver: driver.find_element_by_id(emailFieldId)) 
passFieldElement = wait.until(lambda driver: driver.find_element_by_id(passFieldId)) 
loginButtonElement = wait.until(lambda driver: driver.find_element_by_xpath(loginButtonXpath)) 

Кроме того, обратите внимание, что вы должны использовать find_element_by_xpath() вместо find_element_by_id() при размещении «Вход» кнопку.

+0

спасибо за ваш ответ, сделал это, но он по-прежнему получает ту же ошибку. – 2one2

+0

@ 2one2 получил его, обновил ответ. Я думаю, что это будет решено сейчас. Благодарю. – alecxe

+0

спасибо, что это сработало, я изменил идентификатор с помощью xpath и использовал find_element_by_xpath, но могу ли я спросить, почему я не должен использовать элемент find по id? – 2one2

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