当前位置: 首页 > 后端技术 > Python

Python2环境下继承SeleniumLibrary支持中文关键字

时间:2023-03-26 00:48:48 Python

SeleniumLibary可以实现为继承,其中可以使用@keyword(name="keywordname")自定义关键字。如下图所示:但是当名称为中文时,会报错。解决方法如下:在Python目录(D:\Python27\Lib\site-packages)中找到SeleniumLibrary,修改其中robotlibcore.py的代码。在该处添加name=name.encode('utf-8'),如下图:整个py文件修改后的代码:#Copyright2017-RobotFrameworkFoundation##LicensedundertheApacheLicense,Version2.0(“许可证”);#除非遵守许可证,否则您不得使用此文件。#您可以在##http://www.apache.org/licenses/LICENSE-2.0##获得许可的副本,除非适用法律要求或书面同意,否则根据许可分发的软件#分发在“按原样”为基础,#没有任何明示或暗示的保证或条件。#请参阅许可证以了解特定语言的管理权限和许可证下的限制。“”“RobotFramework的通用测试库核心。主要用途正在简化创建更大的测试库。有关更多信息和示例,请参阅项目p年龄在https://github.com/robotframework/PythonLibCore"""importinspectimportsystry:fromrobot.api.decoimportkeywordexceptImportError:#SupportRF<2.9defkeyword(name=None,tags=()):ifcallable(name):returnkeyword()(name)defdecorator(func):func.robot_name=namefunc.robot_tags=tags返回funcreturndecoratorPY2=sys.version_info<(3,)__version__='1.0.1.dev1'classHybridCore(对象):def__init__(self,library_components):self.keywords={}self.attributes={}self.add_library_components(library_components)self.add_library_components([self])defadd_library_components(self,library_components):forcomponentinlibrary_components:对于name,funcinself._get_members(component):ifcallable(func)andhasattr(func,'robot_name'):kw=getattr(component,name)kw_name=func.robot_nameornameself.keywords[kw_name]=kw#使用原始方法名称和可能的自定义名称将关键字公开为属性。self.attributes[name]=self.attributes[kw_name]=kwdef_get_members(self,component):ifinspect.ismodule(component):返回inspect.getmembers(component)ifinspect.isclass(component):raiseTypeError('库必须是模块或实例,取而代之的是''class{!r}。'.format(component.__name__))iftype(component)!=component.__class__:raiseTypeError('Librariesmustbemodulesornew-styleclass''实例,取而代之的是旧式类{!r}。'.format(component.__class__.__name__))returnself._get_members_from_instance(component)def_get_members_from_instance(self,instance):#避免通过从类而不是实例中获取成员来调用属性。cls=type(instance)fornameindir(instance):owner=clsifhasattr(cls,name)elseinstanceyieldname,getattr(owner,name)def__getattr__(self,name):ifnameinself.attributes:returnself.attributes[name]raiseAttributeError('{!r}对象没有属性{!r}'.format(type(self).__name__,name))def__dir__(self):ifPY2:my_attrs=dir(type(self))+list(self.__dict__)else:my_attrs=super().__dir__()returnsorted(set(my_attrs)|set(self.attributes))defget_keyword_names(self):返回排序(self.keywords)classDynamicCore(HybridCore):_get_keyword_tags_supported=False#get_keyword_tags是RF3.0.2中的新功能defrun_keyword(self,name,args,kwargs):name=name.encode('utf-8')返回self.keywords[name](*args,**kwargs)defget_keyword_arguments(self,name):name=name.encode('utf-8')kw=self.keywords[名称]ifname!='__init__'elseself.__init__args,defaults,varargs,kwargs=self._get_arg_spec(kw)args+=['{}={}'.format(name,value)forname,value默认情况下]ifvarargs:args.append('*{}'.format(varargs))ifkwargs:args.append('**{}'.format(kwargs))returnargsdef_get_arg_spec(self,kw):如果PY2:spec=inspect.getargspec(kw)keywords=spec.keywordselse:spec=inspect.getfullargspec(kw)keywords=spec.varkwargs=spec.args[1:]ifinspect.ismethod(kw)elsespec.args#dropselfdefaults=spec.defaultsor()nargs=len(args)-len(defaults)强制性=args[:nargs]defaults=zip(args[nargs:],defaults)returnmandatory,defaults,spec.varargs,keywordsdefget_keyword_tags(self,name):name=name.encode('utf-8')self._get_keyword_tags_supported=True返回self.keywords[name].robot_tagsdefget_keyword_documentation(self,name):name=name.encode('utf-8')ifname=='__intro__':returninspect.getdoc(self)or''ifname=='__init__':returninspect.getdoc(self.__init__)or''kw=self.keywords[name]doc=inspect.getdoc(kw)或''如果kw.robot_tags而不是self._get_keyword_tags_supported:tags='Tags:{}'.format(','.join(kw.robot_tags))doc='{}\n\n{}'.format(doc,tags)如果docelse标签返回docclassStaticCore(HybridCore):def__init__(self):HybridCore.__init__(self,[])