2017-09-27 69 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時都會執行該方法,但可能會有一些替代方法可以從源代碼中找到,或者在一些僅調用一次的文檔中找到。我現在沒有時間,但是如果你不能,我可以稍後再看看。希望能幫助到你。