I have 2 custom keywords, located in the same package. I try to call one custom keyword from the other one. This code isn’t working in this case:
CustomKeywords.'mypack.myclass.mymethod'()
Please see this link.
@Sudheer_D_J : I try this, but got error message.
Keyword, which should be called:
package uploadFile
import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.checkpoint.Checkpoint
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.model.FailureHandling
import com.kms.katalon.core.testcase.TestCase
import com.kms.katalon.core.testdata.TestData
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import java.awt.Robot
import java.awt.Toolkit
import java.awt.datatransfer.StringSelection
import java.awt.event.KeyEvent
import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import internal.GlobalVariable
class upload2Files {
@Keyword
def upload(TestObject to, String filePath , String file , String file2) {
WebUI.click(to)
StringSelection ss = new StringSelection("\""+filePath+"\" " +"\""+ file +"\" "+ file2 );
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL)
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
}
Other keyword, where I try to call it:
(new uploadFile.upload2Files()).upload(findTestObject('Object Repository/validateFile/input_originalFile'), (d_directory.toString() + '\\') + detachedTXT1, (d_directory.toString() + '\\') + detachedTXT2)
Error message:
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: uploadFile.upload2Files.upload() is applicable for argument types: (com.kms.katalon.core.testobject.TestObject, java.lang.String, java.lang.String) values
Sorry i dont about the error. i am thinking like it is an argument issue. But calling one keyword into other keyword this is the way.
Someone can help you
hello,
are those keywords under in same class?
hello,
this will works fine
TEST
def res = CustomKeywords.'com.two.keyword.Keyword1.getString'("Katalon")
println res
KEYWORDS
import com.two.keyword.Keyword2
public class Keyword1 {
@Keyword
public String getString(String test){
Keyword2 key2 = new Keyword2()
String res = key2.returnFirstKeywordString(test)
return res
}
}
public class Keyword2 {
@Keyword
public String returnFirstKeywordString(String test2){
return "this is returned from keyword 2 "+test2
}
}
RESULT
this is returned from keyword 2 Katalon
@Timo_Kuisma : I got the same error when I try to execute it. Could you please share a sample project, that is working on your environment?
hello,
did you added import as i did
import com.two.keyword.Keyword2
and did you declared new object from class 2 in class 1 like
Keyword2 key2 = new Keyword2()
show your keywords, i can check
@Timo_Kuisma : So, here are my keywords:
upload2Files.groovy:
package uploadFile
import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.checkpoint.Checkpoint
import com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords as CucumberKW
import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
import com.kms.katalon.core.model.FailureHandling
import com.kms.katalon.core.testcase.TestCase
import com.kms.katalon.core.testdata.TestData
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import java.awt.Robot
import java.awt.Toolkit
import java.awt.datatransfer.StringSelection
import java.awt.event.KeyEvent
import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.testobject.TestObject
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import internal.GlobalVariable
class upload2Files {
@Keyword
def upload(TestObject to, String filePath , String file , String file2) {
WebUI.click(to)
StringSelection ss = new StringSelection("\""+filePath+"\" " +"\""+ file +"\" "+ file2 );
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL)
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
}
Method call in fileupload.groovy:
import uploadFile.upload2Files
in method:
upload2Files up = new upload2Files()
up.upload(findTestObject(‘Object Repository/validateFile/input_originalFile’), d_directory.toString(), detachedTXT1, ,detachedTXT2)
Error message:
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: uploadFile.fileupload.upload2Files() is applicable for argument types: (uploadFile.upload2Files) values: [uploadFile.upload2Files@28d79cba]
There is a space between detachedTXT1
and detachedTXT2
.
Thanks, I edited it, but error comes in first line from this 3.
Try changing the 3 lines to this:
upload2Files.upload(findTestObject(‘Object Repository/validateFile/input_originalFile’), d_directory.toString(), detachedTXT1, detachedTXT2)
I am no programming expert, but I think you are calling a constructor method that has not been defined when you invoke upload2Files up = new upload2Files()
.
That was my first try, but it doesn’t work also, I got same error message. A sample project with this construct would be really helpful.
hi,
new instance is not created correct
groovy.lang.MissingMethodException: No signature of method: uploadFile
or
are these really files or String objects?
String file , String file2
debug your arguments
System.out.println("DEBUG "+filePath+ " " +file+ " " +file2)
Hi,
This works
package test
import com.kms.katalon.core.annotation.Keyword
public class KeywordA {
@Keyword
def methodAKeywordA(String something){
println "I'm in the KeywordA"
}
}
package test
import com.kms.katalon.core.annotation.Keyword
public class KeywordB {
KeywordA kA = new KeywordA()
@Keyword
def methodB(){
kA.methodAKeywordA("")
}
}
Your problem is on arguments. Please share your full error message. You should have
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: uploadFile.fileupload.upload2Files() is applicable for argument types: (uploadFile.upload2Files) values: [uploadFile.upload2Files@28d79cba]
Possible solutions: […]
@HeleneB : Full exception:
Reason:
org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: uploadFile.fileupload.upload2Files() is applicable for argument types: (uploadFile.upload2Files) values: [uploadFile.upload2Files@782168b7]
at com.kms.katalon.core.main.CustomKeywordDelegatingMetaClass.invokeStaticMethod(CustomKeywordDelegatingMetaClass.java:50)
at DSS_validateFile.run(DSS_validateFile:62)
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 TempTestCase1561032780817.run(TempTestCase1561032780817.groovy:21)
Caused by: groovy.lang.MissingMethodException: No signature of method: uploadFile.fileupload.upload2Files() is applicable for argument types: (uploadFile.upload2Files) values: [uploadFile.upload2Files@782168b7]
at uploadFile.fileupload.listFilesAndFilesSubDirectories(fileupload.groovy:171)
… 13 more
Method call:
Method:
As I see parameter lists are correct and type of variables too.
String parts = detachedTXT.split(“__”);
String detachedTXT1 = parts[0];
String detachedTXT2 = parts[1];
hi,
usually this error mean that types are not correct or some type not defined at all
No signature of method: uploadFile.fileupload.upload2Files()
And this method ?
yes,
check your argument types and how those are used in methods