Tap or verify element by checking object which properties is dynamic (variable)?

this is the object '‘Object Repository/nine/Sent/SearchResult’ properties (locator using attribute)
where the text ‘[RegressionTestcase]001.SendMail 15122020033833’ is dynamic as per my test case I send string based on auto generated current timestamp.

//*[@class = ‘android.widget.TextView’ and (@text = ‘[RegressionTestcase]001.SendMail 15122020033833’ or . = ‘[RegressionTestcase]001.SendMail 15122020033833’) and @resource-id = ‘com.ninefolders.hd3:id/search_overlay_item_text’]

In test case, i know the verifyElementExist maybe helpful, but how do I make the object properties updated based on my test case? or my approach could be wrong, i should not use that element as object, please advise.

test case, i generate timestamp, send it as part of mail subject.
at search box, i retrieve back the timestamp string and do search.
i want to verify search result returned correctly:

//At Composer, set subject-setup subject dynamic name
def TimeStampNow = CustomKeywords.‘govtech.dynamic.myTimeStamp’()
GlobalVariable.TimeStampNow = TimeStampNow
//store the TimeStampNow to file
def WriteTimeStampNowfile = new File(RunConfiguration.getProjectDir() + “/Data Files/TimeStampNow.txt”)
WriteTimeStampNowfile.newWriter().withWriter { it << TimeStampNow }
//read the TimeStampNow to file
def file = new File(RunConfiguration.getProjectDir() + “/Data Files/TimeStampNow.txt”)
def ReadTimeStampNowfile = file.text

//At Composer, set subject
Mobile.tap(findTestObject(‘Object Repository/nine/Composer/android.widget.EditText - Subject’), 0)
Mobile.setText(findTestObject(‘Object Repository/nine/Composer/android.widget.EditText - Subject’), (’[RegressionTestcase]001.MobileSendMail ’ + TimeStampNow) , 0)

//Search mail search string by using the timestamp stored in file
Mobile.tap(findTestObject(‘Object Repository/nine/Inbox/android.widget.TextView-search’), 0)
Mobile.setText(findTestObject(‘Object Repository/nine/Sent/android.widget.EditText - Search’), (’[RegressionTestcase]001.SendMail ’ + ReadTimeStampNowfile) , 0)

//NOT SURE HOW
Mobile.verifyElementExist(findTestObject(‘Object Repository/nine/Sent/SearchResult’), 10)

to add on, there is list view on screen,
not sure if i can verify if any text exist in the list view, i tried to add variable at object properties text
but execution failed.

//*[@class = ‘android.widget.ListView’ and @resource-id = ‘android:id/list’ and (@text = ‘${text}’ or . = ‘${text}’)]

then my test case
Mobile.tap(findTestObject(‘Object Repository/nine/Sent/android.widget.ListView-Variable’, [(‘text’) : ‘[RegressionTestcase]001.SendMail’+ReadTimeStampNowfile]), 3)

error
e[35m[HTTP]e[39m e[37m–>e[39m e[37mPOSTe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/elementse[39m
e[35m[HTTP]e[39m e[90m{“using”:“xpath”,“value”:"//*[@class = ‘android.widget.ListView’ and @resource-id = ‘android:id/list’ and (@text = ‘[RegressionTestcase]001.SendMail15122020053443’ or . = ‘[RegressionTestcase]001.SendMail15122020053443’)]"}e[39m
e[35m[HTTP]e[39m e[37m<-- POST /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/elements e[39me[32m200e[39m e[90m197 ms - 74e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mPOSTe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/timeoutse[39m
e[35m[HTTP]e[39m e[90m{“type”:“implicit”,“ms”:30000}e[39m
e[35m[HTTP]e[39m e[37m<-- POST /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/timeouts e[39me[32m200e[39m e[90m6 ms - 76e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contexte[39m
e[35m[HTTP]e[39m e[90m{}e[39m
e[35m[HTTP]e[39m e[37m<-- GET /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/context e[39me[32m200e[39m e[90m5 ms - 84e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contextse[39m
e[35m[HTTP]e[39m e[90m{}e[39m
e[35m[AndroidDriver]e[39m Not checking whether webviews have active pages; use the ‘ensureWebviewsHavePages’ cap to turn this check on
e[35m[HTTP]e[39m e[37m<-- GET /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contexts e[39me[32m200e[39m e[90m313 ms - 133e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mPOSTe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contexte[39m
e[35m[HTTP]e[39m e[90m{“name”:“NATIVE_APP”}e[39m
e[35m[HTTP]e[39m e[37m<-- POST /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/context e[39me[32m200e[39m e[90m2 ms - 76e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/screenshote[39m
e[35m[HTTP]e[39m e[90m{}e[39m
2020-12-15 17:35:20.932 ERROR c.k.k.core.keyword.internal.KeywordMain - :x: Object Object Repository/nine/Sent/android.widget.ListView-Variable not found
e[35m[HTTP]e[39m e[37m<-- GET /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/screenshot e[39me[32m200e[39m e[90m538 ms - 501652e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mPOSTe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contexte[39m
e[35m[HTTP]e[39m e[90m{“name”:“NATIVE_APP”}e[39m
e[35m[HTTP]e[39m e[37m<-- POST /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/context e[39me[32m200e[39m e[90m2 ms - 76e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contexte[39m
e[35m[HTTP]e[39m e[90m{}e[39m
e[35m[HTTP]e[39m e[37m<-- GET /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/context e[39me[32m200e[39m e[90m4 ms - 84e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contextse[39m
e[35m[HTTP]e[39m e[90m{}e[39m
e[35m[AndroidDriver]e[39m Not checking whether webviews have active pages; use the ‘ensureWebviewsHavePages’ cap to turn this check on
e[35m[HTTP]e[39m e[37m<-- GET /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contexts e[39me[32m200e[39m e[90m252 ms - 133e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mPOSTe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/contexte[39m
e[35m[HTTP]e[39m e[90m{“name”:“NATIVE_APP”}e[39m
e[35m[HTTP]e[39m e[37m<-- POST /wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/context e[39me[32m200e[39m e[90m2 ms - 76e[39m
e[35m[HTTP]e[39m e[90me[39m
e[35m[HTTP]e[39m e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/session/788af249-2c7b-4d2e-97ad-542748cb01e8/screenshote[39m
e[35m[HTTP]e[39m e[90m{}e[39m
2020-12-15 17:35:21.810 ERROR c.k.k.core.keyword.internal.KeywordMain - :x: Failed to tap on element ‘Object Repository/nine/Sent/android.widget.ListView-Variable’ (Root cause: com.kms.katalon.core.exception.StepFailedException: Object Object Repository/nine/Sent/android.widget.ListView-Variable not found
at com.kms.katalon.core.keyword.internal.KeywordMain.stepFailed(KeywordMain.groovy:50)
at com.kms.katalon.core.mobile.keyword.internal.MobileKeywordMain.stepFailed(MobileKeywordMain.groovy:40)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword$_tap_closure1.doCall(TapKeyword.groovy:79)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword$_tap_closure1.call(TapKeyword.groovy)
at com.kms.katalon.core.mobile.keyword.internal.MobileKeywordMain.runKeyword(MobileKeywordMain.groovy:21)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword.tap(TapKeyword.groovy:86)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword.execute(TapKeyword.groovy:68)
at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:73)
at com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords.tap(MobileBuiltInKeywords.groovy:1267)
at com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords$tap$0.call(Unknown Source)
at 001-Send.run(001-Send:89)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:393)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:384)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:363)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:355)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:251)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:105)
at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
at TempTestCase1608024855067.run(TempTestCase1608024855067.groovy:25)
)
2020-12-15 17:35:21.812 ERROR c.k.katalon.core.main.TestCaseExecutor - :x: Test Cases/001-Send FAILED.
Reason:
com.kms.katalon.core.exception.StepFailedException: Object Object Repository/nine/Sent/android.widget.ListView-Variable not found
at com.kms.katalon.core.keyword.internal.KeywordMain.stepFailed(KeywordMain.groovy:50)
at com.kms.katalon.core.mobile.keyword.internal.MobileKeywordMain.stepFailed(MobileKeywordMain.groovy:40)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword$_tap_closure1.doCall(TapKeyword.groovy:79)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword$_tap_closure1.call(TapKeyword.groovy)
at com.kms.katalon.core.mobile.keyword.internal.MobileKeywordMain.runKeyword(MobileKeywordMain.groovy:21)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword.tap(TapKeyword.groovy:86)
at com.kms.katalon.core.mobile.keyword.builtin.TapKeyword.execute(TapKeyword.groovy:68)
at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:73)
at com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords.tap(MobileBuiltInKeywords.groovy:1267)
at com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords$tap$0.call(Unknown Source)
at 001-Send.run(001-Send:89)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:393)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:384)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:363)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:355)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:251)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:114)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:105)
at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
at TempTestCase1608024855067.run(TempTestCase1608024855067.groovy:25)

i have tired to use static object and tap is working at locator - accessbility ID
test@gmail.com about [RegressionTestcase]001.MobileSendMail15122020055543, Test from mobile 100% & $524.98 END at 5:55 pm, conversation read

test case
Mobile.tap(findTestObject(‘Object Repository/nine/Sent/android.view.View (5)’), 0)

how can i change partial of accessbility ID to variable?
or how to let katalon tap when partial content is matched?

seems like i resolve it by myself
reconfigure object properties to use contains, instead of equals.
able to tap and verify now.