SAPUI5 OPA5 如何触发 select 事件

SAPUI5 OPA5 How to trigger a select event

下面是测试 sap.m.Select 是否包含名为 xyz 的项目然后 select 是否包含项目的典型操作。

success: function(oSelect) {
    var oItems = oSelect.getItems();
    $.each(oItems, function(i,v) {
        if(oItems[i].getText() === "TestItemNameILikeToSelect") {
            oTestOpa5TestItem = oItems[i];
        }
    });
    if(oTestOpa5TestItem !== null) {
        oSelect.setSelectedKey(oTestOpa5TestItem.getKey());
        oTestOpa5TestItem.$().trigger("tap");
    }
},

当我开始测试时 运行 它正确地 select 列表中的正确项目并在浏览器中可见地设置它,但它不会触发后面的附加事件(例如变化="onListItemChanged")。 我的应用程序运行良好,但我找不到为其创建工作测试的方法。

提前致谢

OPA5 有一个 'Action' 接口和两个默认实现,例如'EnterText' 和 'Press'。推荐的用法是在 waitFor() 选项上定义一个 action 块,如下所示:

When.waitFor({
    id: "myButton",
       actions: new Press()
    });

你用的是'old way',但它有一些缺点:

  • success 块与 XHR 请求不同步,但 action 是。
  • 向控件发送 click/tap 事件可能需要选择一些内部元素。想象一下点击导航容器 - 实际上有几个地方可以点击。操作处理这些细节并定义您可以依赖的标准行为。
  • 最好将选择逻辑封装在 matchers 块中,甚至将其抽象为自定义匹配器。这样你的 success 块会更干净,你可以在测试的几个地方重复使用匹配器。

OPA5 Actions

查看官方 UI5 演示套件,位于示例 > OPA5 > 代码:使用 OPA5 模拟 UI5 控件上的用户交互,您将能够找到大量关于一般用户交互的 OPA 5 测试示例。对于 select:

opaTest("Should select an item in a sap.m.Select", function(Given, When, Then) {
        When.waitFor({
            id: "mySelect",
            actions: new Press(),
            success: function(oSelect) {
                this.waitFor({
                    controlType: "sap.ui.core.Item",
                    matchers: [
                        new Ancestor(oSelect),
                        new Properties({ key: "Germany"})
                    ],
                    actions: new Press(),
                    success: function() {
                        Opa5.assert.strictEqual(oSelect.getSelectedKey(), "Germany", "Selected Germany");
                    },
                    errorMessage: "Cannot select Germany from mySelect"
                });
            },
            errorMessage: "Could not find mySelect"
        });

    });

https://sapui5.hana.ondemand.com/#/entity/sap.ui.test.Opa5/sample/sap.ui.core.sample.OpaAction/code/Opa.js