我被困在一个测试用例中,我需要在执行操作后检查,电子邮件是否被触发,如果是,则电子邮件有附件。
对于我正在使用机器人框架的imaplibrary库的Wait For Email关键字的第一个操作。现在对于附件部分,因为没有关键字用于此目的,我已经编写了一个单独的python函数,我将email_index传递给Wait For Email关键字编写的参数。之后,它应该浏览电子邮件并获取附件。
**robot file:**
${new_email}= Wait For Email sender=${sender_email} text=${expected_content} recipient=${recepient} timeout=70
${file} get_attachments ${new_email}
**python function**
import imaplib
import email
# m is the email index passed from wait for email keyword
def get_attachments(m):
if m.get_content_maintype() == 'multipart': #multipart messages only #getting below mentioned error in this line
for part in m.walk():
#find the attachment part
print part.get_content_maintype()
if part.get_content_maintype() == 'multipart': continue
if part.get('Content-Disposition') is None: continue
#save the attachment in the program directory
filename = part.get_filename()
return filename
现在问题是我无法将机器人框架创建的imaplibrary会话共享或传递给自定义python函数。所以我得到低于错误。
AttributeError:'str'对象没有属性'get_content_maintype'
我知道在Builtin库中有一个关键字get_library_instance(),我已经使用下面的代码来获取selenium2libray驱动程序实例。
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('Selenium2Library')
return se2lib._current_browser()
是否有任何类似的方法来解决imapibrary的这个问题?如果没有,请建议一个方法。
我无法为此目的使用imaplibrary的实例,但找到了实现此目的的另一种方法。这个问题的主要目的是看看如何处理机器人框架中的gmail附件相关案例(如检查/读取/下载附件)。下面是它的代码。对于此,下面是一个小的自定义功能,以实现相同的功能。
**robot file:**
Check Mail
${new_email}= Wait For Email sender=${sender_email} text=${expected_content} recipient=${recepient} timeout=70
${file} get_attachments ${new_email}
log many ${file}
**python function**
#index is the email index passed from wait for email keyword
def get_attachments(index):
files=[]
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('email', 'password')
mail.select('inbox')
result, data = mail.uid('fetch',index, '(RFC822)')
m = email.message_from_string(data[0][1])
if m.get_content_maintype() == 'multipart':
for part in m.walk():
#logger.console(part)
#find the attachment part
if part.get_content_maintype() == 'multipart': continue
if part.get('Content-Disposition') is None: continue
#save the attachment in the program directory
filename = part.get_filename()
files.append(filename)
fp = open(filename, 'wb')
fp.write(part.get_payload(decode=True))
fp.close()
return files