UI5在OPA测试中获取模型

时间:2017-09-27 08:18:11

标签: integration-testing sapui5

我正在尝试从Journey文件中获取JSON模型中的值。在页面中获取值没有问题,因为我可以轻松获得我的观点。

问题是,我不知道如何将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循环中时(可能是基于Promise),似乎触发了页面上的waitFor,因此iLenght未定义。

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

1 个答案:

答案 0 :(得分:0)

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

编写OPA测试时,您可以准备特定的对象或数据,以便以后在&#34; setup&#34; &#34;模块的方法&#34;反对并摧毁它们&#34;拆解&#34;方法。因此,在您的旅程文件中,您可以使用类似的内容来创建变量并将其分配给测试页面对象:

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

然后在您的实际opa测试中,您可以访问变量:

&#13;
&#13;
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();
    }
}
&#13;
&#13;
&#13;

要创建模型的models.js文件中的代码是:

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

如果您不在单独文件中的方法中创建模型,则需要在&#34; setup&#34;中设置实例化模型的方法。方法但我认为原则是一样的。每次启动新的opaTest时都会执行该方法,但是可能有一些替代方法可以从源代码中挖掘出来,或者在一些只调用一次的文档中找到。我现在没有时间,但如果你不能,那就大声说,我可以稍后看一看。希望它有所帮助。