python - 如何在 selenium,python 中处理 TimeoutException

标签 python selenium jenkins selenium-webdriver

首先,我创建了几个函数来使用它们代替默认的“find_element_by_...”和 login() 函数来创建“浏览器”。这是我使用它的方式:

def login():
        browser = webdriver.Firefox()
        return browser

def find_element_by_id_u(browser, element):
    try:
        obj = WebDriverWait(browser, 10).until(
            lambda browser : browser.find_element_by_id(element)
            )
        return obj
#########
driver = login()
find_element_by_link_text_u(driver, 'the_id')

现在我通过 jenkins 使用此类测试(并在虚拟机上启动它们)。如果我得到 TimeoutException,浏览器 session 将不会被终止,我必须手动转到 VM 并终止 Firefox 的进程。当 Web 浏览器进程处于事件状态时,jenkins 不会停止它的工作。

所以我遇到了这个问题,我希望它可能会由于异常处理而被解决。 我试图将其添加到我的自定义函数中,但不清楚究竟是哪里发生了异常。即使我得到行号,它也会带我到我的自定义函数,而不是调用它的地方:

def find_element_by_id_u(browser, element):
    try:
        obj = WebDriverWait(browser, 1).until(
            lambda browser : browser.find_element_by_id(element)
            )
        return obj
    except TimeoutException, err:
        print "Timeout Exception for element '{elem}' using find_element_by_id\n".format(elem = element)
        print traceback.format_exc()
        browser.close()
        sys.exit(1)
#########
driver = login()
driver .get(host)
find_element_by_id_u('jj_username').send_keys('login' + Keys.TAB + 'passwd' + Keys.RETURN)

这将为我打印字符串“lambda browser : browser.find_element_by_id(element)”的行号,这对调试很有用。在我的例子中,我有近 3000 行,所以我需要一个适当的行号。

能否请您与我分享您的经验。

PS:我把我的程序分成几个脚本,其中一个只包含 selenium 部分,这就是为什么我需要 login() 函数,从另一个脚本调用它并在其中使用返回的对象。

最佳答案

好吧,在我的脑海里花了一些时间,我找到了一个合适的解决方案。

def login():
        browser = webdriver.Firefox()
        return browser

def find_element_by_id_u(browser, element):
    try:
        obj = WebDriverWait(browser, 10).until(
            lambda browser : browser.find_element_by_id(element)
            )
        return obj
#########
try:
  driver = login()
  find_element_by_id_u(driver, 'the_id')
except TimeoutException:
  print traceback.format_exc()
  browser.close()
  sys.exit(1)

太明显了,我错过了:(

关于python - 如何在 selenium,python 中处理 TimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28585866/

相关文章:

Selenium WebDriver 和 Opera 驱动程序

regex - Jenkins 基于角色的身份验证插件 : Jobs sub directory regex match

python - 使用查询在数据库中保存 python 回溯异常时出现问题

python - GradientTape().gradient() 返回 None 并观察肌腱 - Tensorflow 2

python - python 中的 Selenium 和多处理

java - 根据同一行中另一个元素的条件单击表中的元素

jenkins - Gradle - 不同的任务使用不同的参数

Jenkins 离线安装插件

python - bool() 在 Python 中的实际应用是什么?

python - 如何在python中使用保留关键字作为变量名?