小编Ami*_*i00的帖子

如何在selenium,python中处理TimeoutException

首先,我创建了几个函数来使用它们而不是默认的"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')
Run Code Online (Sandbox Code Playgroud)

现在我通过jenkins使用这些测试(并在虚拟机上启动它们).如果我遇到TimeoutException,浏览器会话将不会被杀死,我必须手动转到VM并终止Firefox的进程.当网络浏览器进程处于活动状态时,詹金斯不会阻止它的工作.

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

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)
Run Code Online (Sandbox Code Playgroud)

这将为我打印字符串"lambda browser:browser.find_element_by_id(element)"的行号,它是用于调试的用途.在我的情况下,我有近3000行,所以我需要一个propper行号.

你能和我分享你的经验吗? …

python selenium jenkins selenium-webdriver

5
推荐指数
1
解决办法
8836
查看次数

标签 统计

jenkins ×1

python ×1

selenium ×1

selenium-webdriver ×1