我是Python和机器人的新手,所以请跟我一起,但这是我想要做的。
我正在2个移动设备上进行一些自动化,并且我创建了一个库,允许我与这些设备进行通信,由我们的一个开发团队提供给我。在我的测试套件中,我必须两次导入此库,每个设备一个实例,我使用WITH NAME机器人来调用特定于每个设备的关键字。例如,我像这样导入库:
Library keyword_module.DEVICE.DEVICE ${USB_GUID_1} WITH NAME d1
Library keyword_module.DEVICE.DEVICE ${USB_GUID_2} WITH NAME d2
该库有一组关键字,我可以从Robot调用它们来执行设备上的基本操作。如:
d1.turn_on_wifi
d2.turn_on_cellular
然后我创建了自己的python模块,在这个模块中我创建了一些关键字,从这个库中获取一些关键字以创建更高级别的功能。我使用Robots BuiltIn()。get_library_instance来引入上面的实例,这样我就可以使用模块中的关键字了。例如:
class Common(object):
def __init__(self, libName):
self.d = BuiltIn().get_library_instance(libName)
def some_keyword(self):
self.d.turn_on_wifi
self.d.turn_off_cellular
然后,我按如下方式导入两个设备的模块:
Library keyword_module.DEVICE.DEVICE $[USB_GUID_1} WITH NAME d1
Library keyword_module.DEVICE.DEVICE $[USB_GUID_2} WITH NAME d2
Library Common.Common d1 WITH NAME D1
Library Common.Common d2 WITH NAME D2
所以现在我可以从Common和D1和D2调用我的关键字,并使用d1和d2作为DEVICE库。
问题是我的库变得越来越大,我想把它分解成基于类似特征分组的子模块,即我想要一个文件/模块用于我创建的wifi关键字,另一个用于细胞,另一种其他东西。
我可以为每个文件执行上面所做的操作,但是我最终会在Robot中使用不同名称的大量导入列表,这是我想要避免的。
我有办法将关键字移动到多个文件中,但仍然只为Robot中的每个设备导入一个。我基本上想要有多个py文件,但是它们都以某种方式链接,这样我仍然只能为每个设备导入一个公共库,这将公开所有关键字供我从所有子文件调用?
这有意义吗?
答案 0 :(得分:1)
你可以看到'Selenium2Library'!
class Selenium2Library(
_LoggingKeywords,
_RunOnFailureKeywords,
_BrowserManagementKeywords,
_ElementKeywords,
_TableElementKeywords,
_FormElementKeywords,
_SelectElementKeywords,
_JavaScriptKeywords,
_CookieKeywords,
_ScreenshotKeywords,
_WaitingKeywords
):
您只需要导入'Selenium2Library',但会公开所有关键字! 例如:
名为'_ALibrary.py'的模块
class _ALibrary(object):
def __init__(self):
pass
def fun1(self):
print 'fun1'`
名为'_BLibrary.py'的模块
class _BLibrary(object):
def __init__(self):
pass
def fun2(self):
print 'fun2'
def fun3(self):
print 'fun3'
一个名为'CommonLibrary.py'的常见模块
import _ALibrary
import _BLibrary
class CommonLibrary(_BLibrary._BLibrary,_ALibrary._ALibrary):
def __init__(self):
for base in CommonLibrary.__bases__:
base.__init__(self)
所以你只需要导入'CommonLibrary.py'
答案 1 :(得分:0)
实现此目的的另一种方法是使用dynamic library api。