How extension works

UITester supports testing TraitsUI editors with various user interaction logic. However it is possible that projects’ test code may require additional logic that is not supported by UITester by default. Furthermore, some projects may implement and maintain their own custom UI editors. Those custom UI editors are also by default not supported by UITester.

The API allows extension such that

  • projects can test TraitsUI editors with user interactions that do not come supported by default.

  • projects can reuse the testing API for testing custom editors.

As described in Add support for performing actions or inspecting states and Add support for locating a nested GUI element, the testing API can be extended by providing one or many registry objects. Internally, UITester maintains a list of registries ordered in decreasing priority. For example, if you provide multiple registries:

tester = UITester(registries=[custom_registry, another_registry])

Interaction and location support registered in the first registry will supersede that of the second (if such implementation exists).

This list of registries is passed on to all UIWrapper created from the UITester. When perform() or inspect() is called, the first registry that can support the given target and interaction will be used. Likewise, locate() follows the same rule for the given target and location. See Understanding Target, Interaction and Location for an explanation on these three types of objects.

This is how UITester supports testing on TraitsUI editor: It extends the given list of registries with more built-in registries that know how to interact with TraitsUI editors, and let UIWrapper do most of the work.