首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引发TimeoutException(message,screen,stacktrace) TimeoutException:消息:

引发TimeoutException(message,screen,stacktrace) TimeoutException:消息:
EN

Stack Overflow用户
提问于 2015-07-27 08:30:47
回答 1查看 18.9K关注 0票数 4

一般来说,我是python和selenium的新手,我正在尝试我在youtube上看到的一个示例。以下是代码示例:

代码语言:javascript
复制
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的代码时,它停止了,并给我这个错误。

代码语言:javascript
复制
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
er@googlecode.com/components/driver-component.js:10667)
    at FirefoxDriver.prototype.findElement (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/fxdriver@google
code.com/components/driver-component.js:10676)
    at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/fxdrive
r@googlecode.com/components/command-processor.js:12643)
    at DelayedCommand.prototype.executeInternal_ (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/fxdriver@
googlecode.com/components/command-processor.js:12648)
    at DelayedCommand.prototype.execute/< (file:///c:/users/ale/appdata/local/temp/tmpmle1b1/extensions/fxdriver@googlec
ode.com/components/command-processor.js:12590)

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

我试着通过看youtube来修复它,但是我卡住了,不知道它是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-27 08:37:24

对于初学者来说,超时值太小,请增大它。此外,您只能定义WebDriverWait实例一次,然后重用:

代码语言:javascript
复制
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()

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31643418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档