When you perform OPA test for my lead application, test case “add Lead” via this url:
It will fail:
The reason could be analyzed via the below picture:
Our OPA test code calls fireLiveChange function.
The live change event handling written in My lead application code is called, which performs oModel.read to read possible values for “f”. Since we pass “true” to read API, this read is done asynchronously, that is, the execution flow directly returns to our OPA code.
Our OPA test code calls oInput.getSuggestionItems. Unfortunately Items is now still initial, since the asynchronous OData call does not finish yet in timeslot t1.
items[0].getText causes the failure of OPA test.
Till timeslot t2, OData request is done and success handling is called, to fill the SuggestionItems aggregation. t2 > t1, it is too late now.
For detail screenshot of the above five steps, please refer to picture below.
Screenshot for step1
Screenshot for step2
Screenshot for step3
Screenshot for step5
Solution
We would like to achieve the following call sequences:
As suggested by Diablo, we could try “wait for aggregation” concept and API to fulfill it:
http://p:8080/sapui5-sdk-dist/docs/api/symbols/sap.ui.test.matchers.html
To be updated soon.
I have added the new matcher mentioned in wiki and now OPA test of add Lead test succeeds.
To summarize,
The newly added matcher will lead to an endless loop by a periodical check with polling interval 400 milliseconds by default, as a result the asynchronously executed OData request has enough time to finish.
In the end we have the following expected time sequence chart.
If you would like to debug matcher logic, please set breakpoint on line below.