Using custom Java keywords/library in Robot Framework using Jython

Im trying to import my own Java library into RFW to use the keywords. Importing Selenium works fine. I have exported the java class to a .jar.
Things I have tried:

With the .jar and .robot file in the same folder:

λ jython -m robot testcase1.robot

Pasting the MyTestLib.jar in C:\Program Files\jython2.7.2\Lib\site-packages and running:

λ jython -m robot testcase1.robot
jython -Dpython.path=C:\Users\Gijs\eclipse-workspace\testrobot\src\test\robotframework\acceptance\ -m robot testcase1.robot
  1. Setting my CLASSPATH env variable to C:\Users\Gijs\eclipse-workspace\testrobot\src\test\robotframework\acceptance
    and running
λ jython -m robot testcase1.robot

Every time i get the same error:

[ ERROR ] Error in file 'C:\Users\Gijs\eclipse-workspace\testrobot\src\test\robotframework\acceptance\testcase1.robot' on line 5: Importing library 'MyTestLib.jar' failed: NoClassDefFoundError: com/cimsolutions/testautomation/testrobot/MyTestLib (wrong name: MyTestLib)

What am I doing wrong?

Here is my java class:


public class MyTestLib {

	
    public static final String ROBOT_LIBRARY_SCOPE = "GLOBAL";

    
    public void hello(String name){
        System.out.println("Hello " + name + ".\n");
    }

    public void Nothing(){
    }

}

Here is my testsuite:

*** Settings ***
Documentation    This is a test file to test RFW
...    
Library    SeleniumLibrary
Library    MyTestLib.jar


*** Test Cases ***
Testcase0
    Log    This is testcase 1.robot Starting logging
    Open Browser    https://google.com    chrome
    Set Browser Implicit Wait    1
    Click Button    //button[.//text() = 'Ik ga akkoord']
    Sleep    1
    Input Text    name=q    Cimsolutions
    Press Keys    name=q    \ue00c
    Press Keys    name=q    \ue007
    Sleep    1
    Close Browser
    Log    Test completed


MyLibTest
    Log     My lib test is starting
    Nothing

I think I installed all requirements correctly:

C:\                                                                                                                  
λ jython --version                                                                                                   
Jython 2.7.2                                                                                                         
                                                                                                                     
C:\                                                                                                                  
λ java --version                                                                                                     
java 11.0.10 2021-01-19 LTS                                                                                          
Java(TM) SE Runtime Environment 18.9 (build 11.0.10+8-LTS-162)                                                       
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.10+8-LTS-162, mixed mode)                                         
                                                                                                                     
C:\                                                                                                                  
λ jython -m robot --version                                                                                          
WARNING: An illegal reflective access operation has occurred                                                         
WARNING: Illegal reflective access by org.python.core.io.StreamIO (file:/C:/Program%20Files/jython2.7.2/jython.jar) t
o field java.io.FilterOutputStream.out                                                                               
WARNING: Please consider reporting this to the maintainers of org.python.core.io.StreamIO                            
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations                
WARNING: All illegal access operations will be denied in a future release                                            
Robot Framework 4.0.3 (Jython 2.7.2 on java11.0.10)                                                                  
                                                                                                                     
C:\                                                                                                                  
λ jython -m pip list                                                                                                 
WARNING: An illegal reflective access operation has occurred                                                         
WARNING: Illegal reflective access by org.python.core.io.StreamIO (file:/C:/Program%20Files/jython2.7.2/jython.jar) t
o field java.io.FilterOutputStream.out                                                                               
WARNING: Please consider reporting this to the maintainers of org.python.core.io.StreamIO                            
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations                
WARNING: All illegal access operations will be denied in a future release                                            
DEPRECATION: A future version of pip will drop support for Python 2.7.                                               
Package                        Version                                                                               
------------------------------ -------                                                                               
pip                            19.1                                                                                  
robotframework                 4.0.3                                                                                 
robotframework-seleniumlibrary 4.2.0                                                                                 
selenium                       3.141.0                                                                               
setuptools                     41.0.1                                                                                
urllib3                        1.26.5                                                                                

Well, I am surprised to see using Java 11 with Jython 2.7.2, but if it works…

I would experiment, to remove the .jar from the library import, and make sure the MyTestLib.jar full pass is in CLASSPATH.

Then if that does not work, I would experiment, without using .jar, but just .java and .class files.

Can’t say more, except for you to double check the User Guide.

Good luck.

I tried downgrading to Java 8, but that was not the problem. Also the Classpath was not the problem as far as i can tell. But when I used the .class file it worked. Tried that before aswell, guess I made a little error somewhere.

Thanks for the help!

1 Like

Try adding the full path to your “MyTestLib.jar” in the CLASSPATH envvar, like:

export CLASSPATH=\path\to\MyTestLib.jar

use Windows equivalent, of course.