2017-09-27 37 views
0

我想从JSON文件中获取JSON模型的值。在页面中,获取值不是问题,因为我可以轻松获得我的视图。UI5在OPA测试中得到的模型

问题是,我不知道如何将OPA测试中的值返回给Journey文件。旅途的

部分:页面

opaTest("Should Navigate to all Workflows and Navigate Home", function(Given, When, Then) { 
    // Arrangements starting the app in Frame 
    Given.iStartMyApp(); 

    //should return the array length of the model 
    var iLength = When.onTheLayerPage.getNumberOfLayers(); 

    for (var iPosition = 0; iPosition < iLength; iPosition++) { 
     When.onTheLayerPage.iSelectListItemAtPosition(iPosition); 
     var iChildLength = When.onTheLayerPage.getNumberOfWorkflows(iPosition); 
     for (var iChildPosition = 0; iChildPosition < iChildLength; iChildPosition++) { 
      When.onTheLayerPage.iSelectChildListItemAtPosition(iPosition, iChildPosition); 
      Then.onTheWorkflowPage.iShouldSeeThePage(); 
      When.onTheAppPage.iPressHomeButton(); 
      Then.onTheLayerPage.iShouldSeeThePage(); 
     } 
    } 

部分:

getNumberOfLayers: function() { 
    this.waitFor({ 
     id: sPageId, 
     viewName: sViewName, 
     actions: function(oPage) { 
      var iLenght = oPage.getModel("out").getProperty("/r/data/layers").length; 
      return iLenght; 
     } 
    }); 
}, 

似乎当我已经在for循环(也许基于无极)页面上的WAITFOR被触发,所以iLenght未定义。

寻找一种方法在循环开始之前返回var。

回答

0

我想我已经找到了解决您的问题的方法,但是如何实现它具体取决于您如何在应用中创建模型。

在编写OPA测试时,您可以准备特定的对象或数据,以便稍后在“模块”对象的“设置”方法中使用,并在“拆卸”方法中销毁它们。因此,在您的旅途文件,你可以使用像这样创建一个变量,并将其分配给测试页面对象:

\t module("Test page model", { 
 
\t \t setup: function() { 
 
\t \t \t this.iLength = models.createModel().getProperty("/r/data/layers").length; 
 
\t \t }, 
 
\t \t teardown: function() { 
 
\t \t \t this.iLength = null; 
 
\t \t } 
 
\t });

然后在你的实际OPA测试,你可以访问变量:

opaTest("Should Navigate to all Workflows and Navigate Home", function(Given, When, Then) { 
 
    // Arrangements starting the app in Frame 
 
    Given.iStartMyApp(); 
 

 
    //should return the array length of the model 
 
    //var iLength = When.onTheLayerPage.getNumberOfLayers(); <- don't need this line 
 

 
    for (var iPosition = 0; iPosition < this.iLength; iPosition++) { // Access the previously created variable here 
 
     When.onTheLayerPage.iSelectListItemAtPosition(iPosition); 
 
     var iChildLength = When.onTheLayerPage.getNumberOfWorkflows(iPosition); 
 
    for (var iChildPosition = 0; iChildPosition < iChildLength; iChildPosition++) { 
 
     When.onTheLayerPage.iSelectChildListItemAtPosition(iPosition, iChildPosition); 
 
     Then.onTheWorkflowPage.iShouldSeeThePage(); 
 
     When.onTheAppPage.iPressHomeButton(); 
 
     Then.onTheLayerPage.iShouldSeeThePage(); 
 
    } 
 
}

在模式中的代码ls.js文件创建模型是:

\t \t createModel: function() { 
 
\t \t \t var oTestModel = new sap.ui.model.json.JSONModel({ 
 
\t \t \t \t \t "r": { 
 
\t \t \t \t \t \t "data": { 
 
\t \t \t \t \t \t \t "layers": [ 
 
\t \t \t \t \t \t \t \t {"dummy": 1}, 
 
\t \t \t \t \t \t \t \t {"dummy": 2}, 
 
\t \t \t \t \t \t \t \t {"dummy": 3} 
 
\t \t \t \t \t \t \t \t ] 
 
\t \t \t \t \t \t } 
 
\t \t \t \t \t } 
 
\t \t \t \t }); 
 
\t \t \t return oTestModel; 
 
\t \t }

如果你没有在一个单独的文件中创建的方法模型,你需要制定出实例化的方式它在“设置”方法,但我认为原则将是相同的。每次启动一个新的opaTest时都会执行该方法,但可能会有一些替代方法可以从源代码中找到,或者在一些仅调用一次的文档中找到。我现在没有时间,但是如果你不能,我可以稍后再看看。希望能帮助到你。