Hi,
I have a web that contains generated ids and slightly changes the pages structure each time that we deploy, if common components are changed (webpack). As a solution to keep stable the Katalon scripts, and after reading this article:
https://docs.katalon.com/katalon-studio/docs/web_element_locators.html#understanding-your-application-under-test-aut
I decided to change the locators in the objects, so instead of the normal xpath, now I base the search in the placeholder text like this:
//input[@placeholder=âSearch for a Clientâ]
ButâŚit doesnât work. The out of the box locator, works:
//div[2]/div[2]/div/div[2]/div/div[2]/div/div/div[1]/div/div/input
The selection method I used in both cases is âXPathâ
Where did I go wrong?
Any help is welcome.
Hi,
Can you share the html of the element ?
1 Like
Hi HeleneB,
This Is the bit of html where the element is contained:
<div class="jss717" style="transform: translate(0px, 0px); transition: transform 225ms cubic-bezier(0, 0, 0.2, 1) 0ms;">
<p class="jss46 jss55 jss721">Search for possible duplicate :</p>
<div class="jss722">No client with exact same name </div>
<div class="jss718">
<div>
<div role="combobox" aria-haspopup="listbox" aria-owns="react-autowhatever-1" aria-expanded="false" class="jss239">
<div>
<div class="jss82 jss245" aria-autocomplete="list" aria-controls="react-autowhatever-1" maxlength="140">
<label class="jss384 jss389 jss377 jss373 jss378 jss381" data-shrink="false">Client<span class="jss390"> *</span>
</label>
<div class="jss117 jss104 jss108 jss118 jss105" maxlength="140">
<input aria-invalid="false" autocomplete="off" class="jss127 jss112" **placeholder="Search for a Client"** required="" type="text" value="">
</div>
</div>
</div>
<div class="jss17 jss21" id="react-autowhatever-1" role="listbox"/>
</div>
</div>
</div>
<div class="jss724"/>
</div>
</div>
Itâs seems correct.
What is the exact error and context ?
1 Like
it says:
com.kms.katalon.core.exception.StepFailedException: Unable to set text âmyclientâ of object âObject Repository/Page_20/input__jss128 jss113â
at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.stepFailed(WebUIKeywordMain.groovy:64)
at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.runKeyword(WebUIKeywordMain.groovy:26)
at com.kms.katalon.core.webui.keyword.builtin.SetTextKeyword.setText(SetTextKeyword.groovy:66)
at com.kms.katalon.core.webui.keyword.builtin.SetTextKeyword.execute(SetTextKeyword.groovy:37)
at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:56)
at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords.setText(WebUiBuiltInKeywords.groovy:950)
at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords$setText$1.call(Unknown Source)
at create new client.run(create new client:38)
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:337)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233)
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 TempTestCase1565272803803.run(TempTestCase1565272803803.groovy:21)
Caused by: org.openqa.selenium.ElementNotInteractableException: element not interactable
I am certain the reason is that I am not landing at the same place when I use /input and when I use the placeholder, but I cannot understand how is it possible.
So, itâs not âobject not foundâ !
I donât think so. The element is still the same, but found differently.
Do you have a step waitForElement[Clickable, Visible or Present] before the send text ? If not, try to add them
1 Like
Yes, even, a delay. I tried everythingâŚ
I think there is a limitation here; I am going to provide more details on how the application works, just in case.
Before clicking in the field, there is a label (Client). the placeholder text is hidden until you click on the input.
If you I use the normal xpath, it works fine all the time. If I use the locator, the element is not interactable.
Any ideas?
After searching a bit, some people say that it could be that the issue could come from 2 elements sharing the same placeholder (not my case) and very few people say that the issue is the xpath is too vague, needing a bit more detail. So I check where could I get more detail from my page, knowing that everything is generic and generated, but I found something:
//div[@role=âdialogâ]//input[@placeholder=âSearch for a Clientâ]
And Thanks God, it did work.
1 Like