Issue with setting dynamic value in xpath

Hello,

I am trying to click on an edit button which comes with following xpath.

Since id is dynamic , I am trying to capture the object with xpath position where //tr[row_count]/td[6]/table/tbody/tr/td/input. Here i can get the row count value based on the below code.

WebDriver driver = DriverFactory.getWebDriver()
WebUI.delay(2)
WebElement Table = driver.findElement(By.xpath(‘//table[@id='approvalRoleSubviewId:approvalRoleForm:searchApprovalRoleTable']/tbody’))
WebUI.delay(2)
List rows_table = Table.findElements(By.xpath(‘//*[@id='approvalRoleSubviewId:approvalRoleForm:searchApprovalRoleTable']/tbody/tr’))
println(rows_table)
int rows_count = rows_table.size()
println(rows_count)
String xpath = (‘("//tr[’+rows_count+‘]/td[6]/table/tbody/tr/td[1]/input")’)

Now I assign this xpath to a new object as below.

TestObject to = new TestObject(“edit”)
to.addProperty(“xpath”, ConditionType.EQUALS, xpath)
WebUI.click(to)

But my click is not working, I am receiving the following error.

[02-26-2020 04:23:36 PM Test Cases/Phase2/pages/Approval Role
Elapsed time: 2m - 13.108s
Test Cases/Phase2/pages/Approval Role FAILED.
Reason:
com.kms.katalon.core.exception.StepFailedException: Unable to click on object ‘edit’
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.ClickKeyword.click(ClickKeyword.groovy:102)
at com.kms.katalon.core.webui.keyword.builtin.ClickKeyword.execute(ClickKeyword.groovy:43)
at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:72)
at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords.click(WebUiBuiltInKeywords.groovy:616)
at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords$click$3.call(Unknown Source)
at Approval Role.run(Approval Role:169)
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 TempTestCase1582705413073.run(TempTestCase1582705413073.groovy:23)
Caused by: com.kms.katalon.core.webui.exception.WebElementNotFoundException: Web element with id: ‘edit’ located by ‘By.xpath: (“//tr[13]/td[6]/table/tbody/tr/td[1]/input”)’ not found
at com.kms.katalon.core.webui.common.WebUiCommonHelper.findWebElement(WebUiCommonHelper.java:1154)
at com.kms.katalon.core.webui.keyword.internal.WebUIAbstractKeyword.findWebElement(WebUIAbstractKeyword.groovy:27)
at com.kms.katalon.core.webui.keyword.internal.WebUIAbstractKeyword.findWebElement(WebUIAbstractKeyword.groovy:26)
at com.kms.katalon.core.webui.keyword.builtin.ClickKeyword$_click_closure1.doCall(ClickKeyword.groovy:67)
]
Now my webpage look like this. I am trying to click on the last row’s edit button.

image

can somebody please suggest me what exactly went wrong?

Regards,
Neethu

hello use attributes as selection method … in Xpath variables are not working

@neethu73 Since your ID is dynamic, you likely won’t be able to use ID in your XPath as it would change each time.

Have you thought about moving through the table as an array (not using XPath)?