Questions of Self-Healing in Test Designer
-
Could we have a list of what actions are included in self-healing, please?
-
I’m a little unsure why Assert Contains text can be included within self-healing but Assert Equal / Contains can’t be, could this be explained?
-
If it is the way that it’s coded could we look at alternatives, for example, could we have an Assert contains an option for attributes i.e. Assert Contains href.
-
Is it possible to include more complex actions that would self-heal? i.e. “Assert text and store value”
Responses:
Below list of assessors that can be SelfHealed:
-
findElsByJqStr
-
focus
-
blur
-
expand
-
doSearch
-
collapse
-
formSubmit
-
pointerOut
-
pointerOver
-
pointerEnter
-
pointerLeave
-
pointerDown
-
pointerUp
-
click
-
click2
-
clickIfFound
-
rightClick
-
mouseOver
-
mouseMove
-
mouseDown
-
mouseUp
-
drop
-
drag
-
nativeDrag
-
nativeDrop
-
clickXY
-
mouseOverXY
-
mouseMoveXY
-
mouseDownXY
-
mouseUpXY
-
mouseDrag
-
mouseDrop
-
doubleCkick
-
doubleClickXY
-
toggleStyle
-
setCaretPosition
-
sentEnter
-
sentText
-
selectText
-
clearText
-
sendKeys
-
setValue
-
setText
-
setValuetoEditor
-
setSelected
-
setChecked
-
reOrderListForVue
-
break
-
paste
-
assertContrainsText
-
assertDoesNotContainText
-
waitUntilVideoCompleted
-
keyboardCommand
-
setHTML
The two asserts that can be self-healed are bolded above, assertContainsText and assertDoesNotContainText.
Regarding #2: Self-healing can only update assessors. Assert equal uses a value and does not use an assessor. You would normally store “validatethisnumber” then you would assert equal “validatethisnumber” with a value of “5” or whatever the number is. Here is a screenshot example:
Where you store a “value” in this case the name is submitdis. Then you assert equal to the value that you stored.
The same logic applies to assert contains, but slightly different. Assert contains works similar to assert text, however only looks for something inside a stored value.
Note that the usual use case for this action follows the above screenshot where you store a value with text. Then you can assert contains text inside what you stored. It's similar but different to assertContainsText and the reason why it can't self-heal is that assert contains uses a value as an assessor (or stored element) whereas assertContainsText uses an assessor.
Regarding how you can make more complex actions that could self-heal. I have an idea that will allow you to have more dynamic scripts and allow for more change, but won't be self-healed. The solution to the problem is creating SmartTags. Essentially telling AIQ that the element on the page is recognized as a value. Instead of having 1 set assessor, you could create a SmartTag that would pick up all assessors that look similar to “SmartTag 1” and allow your scripts to become more dynamic as you test without having to manually update all your assessors for your assert statements. It will just assist in picking up elements on the page without updating. Again, this is not Self-Healing but would improve the functionality of your scripts by making them more dynamic allowing for less maintenance (purpose of Self-Healing).
I had a meeting with our lead developer about your use case asking for more complex actions that would self-heal. He said at this moment we don’t currently support it, and it would be a major project to add self-healing to more assert’s as we would need AI deep learning to automatically pull assessors from the page that doesn’t currently exist. In the future, it's definitely a possibility, but at this moment and in the near future we don’t see this as a feature we will be able to support. We agree 100% that it would be awesome to include, just a massive project to start and finish.
Last updated: August 25, 2023
If you have any feedback on this topic, please contact us at documentation@appvance.ai