# Can i use xpath to locate element directly in scripts instead of objects

**URL:** <https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073>\
**Category:** Web Testing\
**Tags:** katalon-studio\
**Created:** [July 3, 2019, 12:25pm UTC](https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073 "2019-07-03T12:25:35Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![anitha](https://avatars.discourse-cdn.com/v4/letter/a/a587f6/32.png) [@anitha](https://forum.katalon.com/u/anitha)\
**Post date:** [July 3, 2019, 12:25pm UTC](https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073/1 "2019-07-03T12:25:35Z")

</div>

Hi,

I have located the elemnt using xpath, but it will be changing its position. so i think it can be resolved with directly inputting xpath in the scripts

I ve tried the below script  
for (int p=1; p\<10;p++)  
{  
WebElement element1 = WebUiCommonHelper.findWebElement(By.xpath("//div[@id=‘surveylist’]/div/div[p]/div/div//div[@class=‘survey-card-title-text activator truncate tooltipped’]"),30)  
if (element1.getText() == “smoke test”)  
{  
WebUI.executeJavaScript(‘arguments[0].click()’, Arrays.asList(element1))

```
WebUI.delay(5)

WebUI.click(findTestObject(By.xpath("//div[@id='surveylist']/div/div[p]/div/div/div[3]/div[3]/div/div[12]/a/i")))
break
}

```

}

But on executing the , im getting error like

groovy.lang.MissingMethodException: No signature of method: static com.kms.katalon.core.webui.common.WebUiCommonHelper.findWebElement() is applicable for argument types: (org.openqa.selenium.By$ByXPath, java.lang.Integer) values: [By.xpath: //div[@id=‘surveylist’]/div/div[p]/div/div//div[@class=‘survey-card-title-text activator truncate tooltipped’], …]  
Possible solutions: findWebElement(com.kms.katalon.core.testobject.TestObject, int), findWebElements(com.kms.katalon.core.testobject.TestObject, int)

Kindly help me out to solve this

---

<div class="post-metadata">

**Author:** ![Marek\_Melocik](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/marek_melocik/32/371_2.png) [@Marek\_Melocik](https://forum.katalon.com/u/Marek_Melocik)\
**Post date:** [July 3, 2019, 12:28pm UTC](https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073/2 "2019-07-03T12:28:03Z")

</div>

This is what you can to do easily use XPath in findTestObject.

Create a new custom keyword called TestObjectHelper (or whatever)

```
public class TestObjectHelper {
	public static TestObject getTestObjectWithXpath(String xpath) {
		return new TestObject().addProperty('xpath', ConditionType.EQUALS, xpath)
	}
}

```

Usage:

`WebUI.click(TestObjectHelper.getTestObjectWithXpath('//whatever'))`

---

<div class="post-metadata">

**Author:** ![anitha](https://avatars.discourse-cdn.com/v4/letter/a/a587f6/32.png) [@anitha](https://forum.katalon.com/u/anitha)\
**Post date:** [July 3, 2019, 12:59pm UTC](https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073/3 "2019-07-03T12:59:55Z")

</div>

Thanks Marek. I did like you said

But again am facing the issue as below

groovy.lang.MissingMethodException: No signature of method: static com.kms.katalon.core.testobject.ObjectRepository.findTestObject() is applicable for argument types: (com.kms.katalon.core.testobject.TestObject) values: [TestObject - ‘’]  
Possible solutions: findTestObject(java.lang.String), findTestObject(java.lang.String, java.util.Map)

---

<div class="post-metadata">

**Author:** ![Marek\_Melocik](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/marek_melocik/32/371_2.png) [@Marek\_Melocik](https://forum.katalon.com/u/Marek_Melocik)\
**Post date:** [July 3, 2019, 1:02pm UTC](https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073/4 "2019-07-03T13:02:28Z")

</div>

Oh, sorry, my fault. Even findTestObject method is unnecessary.

`WebUI.click(TestObjectHelper.getTestObjectWithXpath('//whatever'))`

---

<div class="post-metadata">

**Author:** ![anitha](https://avatars.discourse-cdn.com/v4/letter/a/a587f6/32.png) [@anitha](https://forum.katalon.com/u/anitha)\
**Post date:** [July 3, 2019, 1:06pm UTC](https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073/5 "2019-07-03T13:06:53Z")

</div>

Thank you. It worked now.

---

<div class="post-metadata">

**Author:** ![a.bach](https://dub1.discourse-cdn.com/katalon/user_avatar/forum.katalon.com/a.bach/32/16103_2.png) [@a.bach](https://forum.katalon.com/u/a.bach)\
**Post date:** [November 25, 2020, 9:37am UTC](https://forum.katalon.com/t/can-i-use-xpath-to-locate-element-directly-in-scripts-instead-of-objects/29073/6 "2020-11-25T09:37:06Z")

</div>

this was exactly what I was looking for. I use this Testhelper class too.

But when call WebUI.click… I get this error. did I miss something? (just renamed the method in the class)

```
click(TestObjectHelper.findTestObjectWithXpath(strTestXpath))
2020-11-24 13:55:00.014 ERROR c.k.k.core.main.WSVerificationExecutor - ? Verification FAILED.
Reason:
groovy.lang.MissingPropertyException: No such property: TestObjectHelper for class: WSVerification1606222480518
	at WSVerification1606222480518.run(WSVerification1606222480518:63)
	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.WSVerificationExecutor.runScript(WSVerificationExecutor.java:146)
	at com.kms.katalon.core.main.WSVerificationExecutor.doExecute(WSVerificationExecutor.java:140)
	at com.kms.katalon.core.main.WSVerificationExecutor.processExecutionPhase(WSVerificationExecutor.java:123)
	at com.kms.katalon.core.main.WSVerificationExecutor.accessMainPhase(WSVerificationExecutor.java:115)
	at com.kms.katalon.core.main.WSVerificationExecutor.execute(WSVerificationExecutor.java:103)
	at com.kms.katalon.core.main.TestCaseMain.runWSVerificationScript(TestCaseMain.java:127)
	at com.kms.katalon.core.main.TestCaseMain$runWSVerificationScript$0.call(Unknown Source)
	at TempTestCase1606222477921.run(TempTestCase1606222477921.groovy:25)
```
