首先,我创建了几个函数来使用它们,而不是默认的“find_element_by_u…”和login()函数来创建“browser”。我就是这么用的: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,浏览器会话将不会被终止,我必须手动转到VM并终止Firefox的进程。当网络浏览器进程处于活动状态时,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()函数,从另一个脚本调用它并在其中使用返回的对象。