Katalon Recorder "click" step passes but doesn't perform real click

I’m facing an issue after migrating a test case from Selenium IDE (.side) to Katalon Recorder. The test involves interacting with a web page that uses a grid, where:

  • A <td> acts like a checkbox (clicking it triggers a selection)
  • Or clicking a <td> dynamically appends an <input>

When I run the test in Katalon Recorder:

  • The click step is marked as “Passed”
  • But the actual click doesn’t happen on the UI (no checkbox toggled, no input shown)

Even when I use the Record function, Katalon can successfully record the step, but it still doesn’t perform the click properly when replayed.

  • Does Katalon Recorder support clicking on elements like <td> or dynamic UI components?
  • Any advice would be appreciated. Thanks!
1 Like

Hi there, and thanks for posting in the Katalon community! :hugs:

Working with recording, we encourage you trying Katalon Web Recorder Plus: Katalon Web Recorder Plus | Katalon Docs. Double-checking the steps and configurations might resolve the issue.

If the doc doesn’t help, feel free to provide more details, and a community member will assist you soon. Thanks for being a part of our community!

Best,
Elly Tran

Hello, thanks for the reply!

Just to clarify:
I’m using the Katalon Recorder extension from the Chrome Web Store, not Katalon Studio. Due to company policy, I cannot use Katalon Studio

So does “Katalon Studio Recording Engine” extension from extension store improved the recorder?

Thanks.

To address the issue step by step:

Step 1: Ensure the element is ready and visible

Modify the test step to wait for the element to be present and visible. For example:

text

waitForElementPresent | locator | 30000
waitForVisible | locator | 30000

Then, try the click again.

Step 2: Try using clickAt

Sometimes, clicking at a specific coordinate within the element might help. You can use:

text

clickAt | locator | 0,0

Step 3: Use JavaScript to click

If the above doesn’t work, we can try to execute a JavaScript click:

text

runScript | document.querySelector('your_css_selector').click();

But note: This approach requires a stable CSS selector. Also, it might not trigger all events if the event listeners are attached in a specific way.

Step 4: Simulate a real mouse event

We can use the mouseOver, mouseDown, and mouseUp commands to simulate a real click:

text

mouseOver | locator
mouseDown | locator
mouseUp | locator

Alternatively, we can use the sendKeys command to send the Enter key to the element, as sometimes the element is keyboard accessible.

Step 5: Check the element’s intended behavior

If the element is a checkbox, perhaps it is intended to be toggled by a keyboard (like spacebar). In that case:

text

sendKeys | locator | ${KEY_SPACE}

Step 6: Verify the element’s visibility and position

Ensure the element is not hidden or off-screen. We can use scrollIntoView:

text

runScript | window.document.evaluate("xpath_expression", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.scrollIntoView(true);

Alternatively, if using a CSS selector:

text

runScript | document.querySelector('your_css_selector').scrollIntoView(true);

Step 7: Check for iframes

If the element is inside an iframe, we must switch to the iframe first.

text

selectFrame | id_or_name_or_index

Then perform the click, and then switch back to the parent:

text

selectFrame | relative=parent

Step 8: Check for dynamic changes in the DOM

If the element is dynamically added, we might need to use a different waiting strategy. We can use waitForElementPresent or waitForVisible with a different locator that is stable.

Step 9: Use XPath instead of CSS

Sometimes, the CSS selector might be affected by dynamic classes, but an XPath based on text or a stable attribute might work better.

Step 10: Consider using the store command to debug

Store the element’s outerHTML to see what it looks like at the time of the click:

text

store | outerHTML | locator | variableName
echo | ${variableName}

We need to see how the click event handler is implemented in the target HTML.

I suspect that a click event hander in JavaScript is NOT associcated with the <td> element.
I suspect that a click event handler is actually associated with some element inside the <td> element.
In such case, I doubt a call to WebUI.click(TestObject to td element) can activate the click event handler.

You should look at the target HTML and JavaScript in detail, and you should code your test so that it performs as the target HTML & JavaScript exect. Without understanding how the target page is coded, we would not be able to reach to any solution.

Thank you for replying!
I’ve tried all the suggestions you mentioned — including runScript, dispatchEvent, scrollIntoView, and different click selectors — but only sendKeys with KEY_SPACE actually works.

Using sendKeys | xpath=... | ${KEY_SPACE} allows me to:

  • Check the checkbox
  • Or trigger the input field to appear

This solution is only temporary, because:

  • When I click another button or element outside the table, I lose focus of the selected cell
  • After that, I **can’t restore focus ** — so sendKeys1 stops working

Hi, thanks for replying!

  • I’m using the Katalon Recorder Extension from the Chrome Web Store, not Katalon Studio
  • So I can’t use WebUI.click(TestObject)
  • Instead, I’m limited to the commands available in the Recorder, like click, sendKeys, runScript, etc.

I don’t have a full project to share and The JavaScript is part of a private company framework, and too large/complex to trace easily from Chrome DevTools and confidencial to share, but here’s a screenshot of the <td> I’m working with:


I have no more idea.

Is it possible for you to confirm the below pathway uniquely identifies your checkbox as a locator? Then, with the Step 1 that @dineshh has above to ensure the element is on the page, try to ‘click’ on the checkbox again.

xpath=//table/tbody/tr[2]/td[1]//div[@class='GMPageOne']/table/tbody/tr[2]/td[3]