我正在尝试从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的方法。
答案 0 :(得分:0)
我认为我已经找到了解决您问题的方法,但具体取决于您在应用中如何创建模型。
编写OPA测试时,您可以准备特定的对象或数据,以便以后在&#34; setup&#34; &#34;模块的方法&#34;反对并摧毁它们&#34;拆解&#34;方法。因此,在您的旅程文件中,您可以使用类似的内容来创建变量并将其分配给测试页面对象:
module("Test page model", {
setup: function() {
this.iLength = models.createModel().getProperty("/r/data/layers").length;
},
teardown: function() {
this.iLength = null;
}
});
&#13;
然后在您的实际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();
}
}
&#13;
要创建模型的models.js文件中的代码是:
createModel: function() {
var oTestModel = new sap.ui.model.json.JSONModel({
"r": {
"data": {
"layers": [
{"dummy": 1},
{"dummy": 2},
{"dummy": 3}
]
}
}
});
return oTestModel;
}
&#13;
如果您不在单独文件中的方法中创建模型,则需要在&#34; setup&#34;中设置实例化模型的方法。方法但我认为原则是一样的。每次启动新的opaTest时都会执行该方法,但是可能有一些替代方法可以从源代码中挖掘出来,或者在一些只调用一次的文档中找到。我现在没有时间,但如果你不能,那就大声说,我可以稍后看一看。希望它有所帮助。