Use composition/components over inheritance/mixins #801
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR changes how we extract and share functionality between page objects. Previously, we were creating mixins with locators and methods, which were then inherited by page objects. Our mixins also relied on the Playwright page object, which means they needed to be initialised.
This does not scale very well. When page objects want to use multiple mixins, they have to inherit from each. This requires handling multi-inheritance and ensuring constructors for each mixin are called correctly. This starts to require extra handling as the number of mixins grows, which is not ideal.
We should use composition instead. Our mixins are now components, and page objects that use their functionality now just set a field (e.g.
self.tabs = ChildRecordTabs(page)) which can then be accessed whenever this functionality is required. It's much easier to scale this up and will help with some upcoming PRs.