Ami*_*i00 5 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')
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行号.
你能和我分享你的经验吗?
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)
Run Code Online (Sandbox Code Playgroud)
太明显了,我错过了:(
| 归档时间: |
|
| 查看次数: |
8836 次 |
| 最近记录: |