【问题标题】:robotframework hybrid library keyword won't return value机器人框架混合库关键字不会返回值
【发布时间】:2014-03-07 13:19:46
【问题描述】:

我在 python 中为机器人框架构建了一个混合库。此 API 的其中一种方法返回一个字符串,我想将它分配给测试中的机器人框架变量。

${sms_1_2}=   encrypt_sms_return_ciphered     1@ercom.fr      2@ercom.fr      sms1to2

我已经验证了 encrypt_sms_return_ciphered 的 python 代码确实返回了一个字符串。但问题是robotframework变量被赋值为None。

方法代码如下:

@InstanceIndex.check_short_name
def encrypt_sms__return_ciphered(self, sender, receiver, clearsms):
    self.encrypt_sms(sender, receiver, clearsms)
    ClientIndex.success_if(sender, "isSmsSent", receiver,  clearsms)
    cipheredsms = self.smsSent[receiver, clearsms]
    del self.smsSent[receiver, clearsms]
    return cipheredsms

这里是 check_short_name 装饰器的代码:

@staticmethod
def check_short_name(method):
    def wrapper(self, short_name, *args, **kwargs):
        if short_name != self.short_name:
            try:
                getattr(self.collection.iterate(), method.__name__)(short_name, *args, **kwargs)
            except StopIteration:
                raise Exception("item \"%s\" is not a member of %s, or method \"%s\" is not defined for any member of %s" % (short_name, self.collection.name, method.__name__, self.collection.name))
        else:
            self.collection.rewind()
            return method(self, short_name, *args, **kwargs)
    return wrapper

【问题讨论】:

    标签: python decorator robotframework python-decorators


    【解决方案1】:

    我发现了问题所在:返回价值链从一开始就被破坏了。 getattr 之前没有返回:

    @staticmethod
    def check_short_name(method):
        def wrapper(self, short_name, *args, **kwargs):
            if short_name != self.short_name:
                try:
                    **return** getattr(self.collection.iterate(), method.__name__)(short_name, *args, **kwargs)
                except StopIteration:
                    raise Exception("item \"%s\" is not a member of %s, or method \"%s\" is not defined for any member of %s" % (short_name, self.collection.name, method.__name__, self.collection.name))
            else:
                self.collection.rewind()
                return method(self, short_name, *args, **kwargs)
        return wrapper
    

    【讨论】:

      猜你喜欢
      • 2013-11-08
      • 2016-01-03
      • 2017-08-09
      • 2018-12-21
      • 2015-10-14
      • 2019-06-11
      • 2017-12-19
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多