Karate interoperabilidad funciona muy bien con mis ejemplos sencillos en escritura sin embargo frente a un problema con este método específico. ¿Me estoy perdiendo de algo? Aprecio tu ayuda.
Pasos de escenarios de ejemplo
* configure driver = { type: 'chromedriver', executable: '/Users/vxt82/Apps/chromedriver', showDriverLog: true , readTimeout: 120000, httpConfig: { readTimeout: 120000 }}
* driver 'http://XXXXXX.XXXX'
* def searchLocators = read('classpath:folder-name/locators/search-page.json').SearchPage.search
* table searchData
| txtNumber| txtSsn | btnSearch | dataExpectedValues |
| 'L02'| 'XXXXXX' | "-" | ["999XYZ","L02","LAST_PQ02","FIRST_PQ02","3211","P","","","","","","01/01/2020","01/31/2020","","Update","Passed","View"]|
| 'L02'| 'XXXXXX' | "-" | ["999XYZ","L02","LAST_PQ02","FIRST_PQ02","3211","P","","","","","","01/01/2020","01/31/2020","","Update","Passed","View"]|
* utils.ui.printClass(driver)
* utils.ui.printClass(searchLocators)
* utils.ui.printClass(searchData[0])
* utils.ui.performAutomatedFormFilling(driver,searchLocators, searchData[0])
Métodos de Java:
public static void performAutomatedFormFilling(WebDriver driver, LinkedHashMap<Object,Object> locators, LinkedHashMap<Object,Object> dataToSearch){
.....
}
public static void printClass(Object o){
System.out.println("Class Name: "+ o.getClass());
}
Salida de consola:
Class Name: class com.intuit.karate.driver.chrome.ChromeWebDriver
Class Name: class java.util.LinkedHashMap
Class Name: class java.util.LinkedHashMap
sample.feature:68 - no step-definition method match found for: utils.ui.performAutomatedFormFilling(driver,searchLocators, searchData[0])
ACTUALIZACIÓN: Sólo una nota. Probé otro modo modificando método de firma para que coincida con la llamada de la siguiente manera, sin embargo no hubo suerte.
public static void performAutomatedFormFilling(Object driver, Object locators, Object dataToSearch){
.....
}
Sí, el Karate se puede confundir con expresiones complejas JS, aquí creo que los corchetes son el problema. Propongo 2 opciones:
* (utils.ui.performAutomatedFormFilling(driver,searchLocators, searchData[0]))
O 2 pasos:
* def searchArg = searchData[0]
* utils.ui.performAutomatedFormFilling(driver, searchLocators, searchArg)
Creo que ha empezado a complicar excesivamente sus pruebas. ¿Usted realmente necesita tantas utilidades. Sólo tratar de hacer sus pruebas de lectura, incluso si esto significa repetir siempre lo mismo un poco. Consulte esta respuesta - especialmente los vínculos: https://stackoverflow.com/a/60562941/143475