文件结构
integration/navigationJourney.js
OPA测试用例描述
sap.ui.require([//需要引入opaQunit,则可以按照Qunit的书写方式进行书写"sap/ui/test/opaQunit"
], function () {
"use strict";// 一个测试module,类似于QunitQUnit.module("Navigation");// 一个测试用例,第一个参数字符串描述测试用例功能opaTest("Should open the hello dialog", function (Given, When, Then) {// Arrangements,测试的前期准备工作,例如应用程序启动,特定数据存在Given.iStartMyAppInAFrame(jQuery.sap.getResourcePath("sap/ui/demo/app/test", ".html"));//Actions,虚拟用户动作,以在Assertions中检查是否到达预期状态,主要操作为查找,操作When.onTheAppPage.iPressTheSayHelloWithDialogButton();// Assertions,检查用户操作是否达到预期,主要操作为查找,断言判断,最后关闭iFrameThen.onTheAppPage.iShouldSeeTheHelloDialog().and.iTeardownMyAppFrame();});
});
integration/pages/App.js
具体定义navigationJourney中的各种函数
sap.ui.require(["sap/ui/test/Opa5" //引入Opa5,在其基础上使用createPageObjects()创建辅助对象,定义函数体"导入需要用的依赖""sap/ui/test/actions/Press" //可以在waitFor中的actions : new Press()进行按键操作"sap/ui/test/matchers/PropertyStrictEquals" //可以在waitFor中的matchers : new PropertyStrictEquals({ name : "text", value : "I got pressed"})匹配找到的元素的某属性是否和期待的一致
],
function (Opa5) {
"use strict";Opa5.createPageObjects({// opa对于AppPage的辅助对象onTheAppPage: {//Actions,虚拟用户动作,以在Assertions中检查是否到达预期状态,主要操作为查找,success中进行操作actions: {iPressTheSayHelloWithDialogButton: function () {return this.waitFor({controlType: "sap.m.Button",success: function (aButtons) {aButtons[0].$().trigger("tap");},errorMessage: "Did not find the helloDialogButton button on the app page"});}},// Assertions,检查用户操作是否达到预期,主要操作为查找,success中进行断言判断assertions: {iShouldSeeTheHelloDialog: function () {return this.waitFor({controlType: "sap.m.Dialog",success: function () {// we set the view busy, so we need to query the parent of the appOpa5.assert.ok(true, "The dialog is open");},errorMessage: "Did not find the dialog control"});}}}});
});
integration/opaTests.qunit.html
测试页面
<!DOCTYPE html>
<html>
<head><title>Opa tests for SAPUI5 Walkthrough</title><meta http-equiv='X-UA-Compatible' content='IE=edge'><meta charset="utf-8"><script id="sap-ui-bootstrap"src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"data-sap-ui-resourceroots='{//设置相对路径到该文件所在路径"sap.ui.demo.walkthrough.test.integration": "./","sap.ui.demo.app.test" : "../mockServer"}'></script><script>jQuery.sap.require("sap.ui.qunit.qunit-css");jQuery.sap.require("sap.ui.thirdparty.qunit");jQuery.sap.require("sap.ui.qunit.qunit-junit");jQuery.sap.require("sap.ui.test.opaQunit");jQuery.sap.require("sap.ui.test.Opa5");// 导入pages(即用例中调用的函数具体定义)jQuery.sap.require("sap.ui.demo.walkthrough.test.integration.pages.App");// 导入journeys(即用例描述)jQuery.sap.require("sap.ui.demo.walkthrough.test.integration.navigationJourney");</script></head>
<body>
<div id="content"></div>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>
测试开始:
可以以UIComponent开始测试或者以iFrame开始测试,每次开始测试时都要将上一个UIComponet或者iFrame拆卸
UIComponet:
.iStartMyUIComponent({componentConfig: {name: "samples.components.button"} ,hash: "newHashValue"
});
拆卸:
.iTeardownMyUIComponent();
iFrame:
.iStartMyAppInAFrame("index.html?responderOn=true");
拆卸:
new sap.ui.test.Opa5().iTeardownMyApp();
// or
new sap.ui.test.Opa5().iTeardownMyAppFrame();