使用不同库对象的关键字

时间:2016-04-25 12:59:12

标签: python robotframework

我有两个libs,都使用open()方法:

Library Menu.py
Library Submenu.py

*** Test Cases ***
MenuOpen
    open Menu

SubmenuOpen
    open Submenu
*** Keywords ***
    open
    [Arguments]    ${library_object}
    ${library_object}.open()

(这是一个简化的例子,这就是为什么关键字只包含一行,但它显示了我的问题)。如何创建和传递库对象,使这段代码真正起作用?

2 个答案:

答案 0 :(得分:0)

如果我的问题是对的。 导入模块时,您可以执行基本操作:

import myModule1, my Module2

然后你的菜单实际上会被称为myModule1.Menu和myModule2.Menu

或者您可以导入,或者甚至可以从/ import / as导入,例如:

from myModule1 import Menu as Menu
from myModule2 import Menu as SubMenu

答案 1 :(得分:0)

要获取库实例,您可以使用Get library instance中的BuiltIn library关键字。通过该实例,您可以使用Call method关键字来调用该库中的关键字:

angular.module('app', [])
  .directive('myTag', function() {
    return {
      transclude: true,
      template: '<a href="#" ng-transclude></a>'
    }
  })
  .directive('myList', ['$compile', function($compile) {
    return {
      template: '<ul></ul>',
      link: function(scope, element) {
        scope.$watchCollection('data', function(data) {
            if(data && data.length) { 
              element.empty(); 
              data.forEach(function(item) {
                element.append( 
                  $compile( // <= in order to make myTag directive work, you need to compile text
                    angular.element('<p>'+item+'</p>').contents() // convert text to list of DOM elements wrapped by jqLite/jQuery
                  )(scope)
                );
              });
            }
          }
        );
      }
    }
  }])
  .run(['$http', '$rootScope', function($http, $rootScope) {
    $rootScope.data = []; 
    $http.get('data.txt').then(function(xhr) { 
      $rootScope.data.push(xhr.data);
    });
  }]);

您也可以传入名称,并使用Run关键字:

open
    [Arguments]    ${library_object}
    ${lib}=        Get library instance    ${library_object}
    call method    ${lib}    open

如果你想避免这种诡计,你可以通过完全限定它来直接调用你想要的任何一个库的*** Keywords *** open [Arguments] ${library_object} run keyword ${library_object}.open 关键字:

open