有没有办法从机器人框架获取当前的 imaplibrary 实例并传递给单独的 python 函数?
Is there a way to get current imaplibrary instance from robot framework and pass to a separate python function?
我被困在一个测试用例中,我需要检查执行操作后是否触发了电子邮件,如果是,则电子邮件有附件。
对于第一个操作,我正在使用 Wait For Email robotframework 的 imaplibrary 库的关键字。现在对于附件部分,因为没有用于此目的的关键字,我编写了一个单独的 python 函数,我将 email_index 作为参数传递给 等待电子邮件 关键字。之后它应该遍历电子邮件并获取附件。
**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' object has no attribute 'get_content_maintype'
我知道内置库中有一个关键字 get_library_instance() 并且我已经在使用下面的代码来获取 selenium2libray 驱动程序实例。
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('Selenium2Library')
return se2lib._current_browser()
有没有类似的方法可以解决 imaplibrary 的这个问题?如果没有,请提出解决方法。
我无法为此目的使用 imaplibrary 的实例,但找到了另一种实现此目的的方法。这个问题的主要目的是了解如何在机器人框架中处理与 gmail 附件相关的案例(如 check/read/downloading 附件)。下面是它的代码。为此,下面是一个用于实现相同目的的小自定义函数。
**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
我被困在一个测试用例中,我需要检查执行操作后是否触发了电子邮件,如果是,则电子邮件有附件。
对于第一个操作,我正在使用 Wait For Email robotframework 的 imaplibrary 库的关键字。现在对于附件部分,因为没有用于此目的的关键字,我编写了一个单独的 python 函数,我将 email_index 作为参数传递给 等待电子邮件 关键字。之后它应该遍历电子邮件并获取附件。
**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' object has no attribute 'get_content_maintype'
我知道内置库中有一个关键字 get_library_instance() 并且我已经在使用下面的代码来获取 selenium2libray 驱动程序实例。
def get_webdriver_instance():
se2lib = BuiltIn().get_library_instance('Selenium2Library')
return se2lib._current_browser()
有没有类似的方法可以解决 imaplibrary 的这个问题?如果没有,请提出解决方法。
我无法为此目的使用 imaplibrary 的实例,但找到了另一种实现此目的的方法。这个问题的主要目的是了解如何在机器人框架中处理与 gmail 附件相关的案例(如 check/read/downloading 附件)。下面是它的代码。为此,下面是一个用于实现相同目的的小自定义函数。
**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