gpt4 book ai didi

python - 有没有办法从机器人框架获取当前的imaplibrary实例并传递给单独的python函数?

转载 作者:行者123 更新时间:2023-12-01 08:42:18 25 4
gpt4 key购买 nike

我陷入了一个测试用例,我需要检查执行操作后是否触发了电子邮件,如果是,则电子邮件有附件。

对于第一个操作,我使用 robotsframework 的 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 session 共享或传递给自定义 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附件相关的情况(例如检查/阅读/下载附件)。下面是它的代码。为此,下面是一个用于实现相同目的的小型自定义函数。

**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

关于python - 有没有办法从机器人框架获取当前的imaplibrary实例并传递给单独的python函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53452613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com