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

问题描述 投票:1回答:1

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

对于我正在使用机器人框架的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的这个问题?如果没有,请建议一个方法。

python automation robotframework gmail-imap imaplib
1个回答
1
投票

我无法为此目的使用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
© www.soinside.com 2019 - 2024. All rights reserved.