# Robot framework with java: where to put browser driver path?

I'm trying to set up a maven+robot+selenium3+testNG project using Eclipse and java.

So far, I've created a maven project and added the dependencies and plugins to its pom.xml so I don't have to manually download anything. I added the following dependencies: selenium-java, selenium-server (not sure if I need it), testng, robotframework, robotframework-maven-plugin, robotframework-selenium2library-java, and also the robotframework-maven-plugin.

I also added a tests.robot file under src/test/robotframework/acceptance with this test:

*** Settings ***
Library  Selenium2Library

*** Test Cases ***
Close Browser


However, I'm not sure how to tell robot where my chromedriver is. Currently, when I run as maven-install, I get "java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property;

I read somewhere that I should create my own keyword and then use System.setProperty("webdriver.chrome.driver", "path\\chromedriver.exe"); but I don't really know how to create my own keywords in java, and how to connect them with robot.

I actually found out how to do it:

I created a .java file within src/main/java/mycompany and added a method that sets up the property:

package mycompany;

public class Setup {
public void browserSetup() {
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
}
}


Then, in my test, I imported this as a library:

*** Settings ***
Library  Selenium2Library
Library  mycompany.Setup


And then invoked the method as a new keyword: Browser Setup.

That was it. I ran it and it worked.

EDIT: Just in case anyone is wondering how to reference chromedriver.exe as a relative path within the project, I placed the exe file in my {root_project_directory}\src\test\resources directory, then used it as src\\test\\resources\\chromedriver.exe (notice the \ escaping needed).

• I am puzzled that how does it even work! 1. Your function name was 'browserSetup' in Java. How did it become the Robot Framework keyword 'Browser Setup'? I observed that Robot Framework is processes camel case java functions and creates them as space separated keywords. How is it possible? 2. I am happy that this is working. Now, I would like to enhance this java function to pass the driver from .robot files. How can I do that. Example: I would like to pass the webdriver from .robot file along with table locator and process the table to validate the rows. How can I do it? – Santosh Bukkashetti Aug 4 '18 at 15:56
• Floella, I'm commenting to highlight you on the SE bar because I Santosh's comment was accidentally posted as an answer and I wanted to make sure the highlight went through. =) – corsiKa Aug 5 '18 at 7:52

'Create Webdriver' keyword allows passing argument to WebDriver's __init__, this means that it can pass argument to the constructor of WebDriver class. And WebDriver class constructor has an argument as 'executable_path' which is the path of the webdriver exe file.

We can use keyword arguments i.e kwargs={} to pass arguments to the the WebDriver Constructor. We have to create keyword dictionary and pass it in as argument kwargs.

This is the detail of keyword Create WebDriver:

Create Webdriver driver_name, alias=None, kwargs={}, **init_kwargs

Code to launch webdriver from custom path and launch URL:

*** Variables ***
${Driver_Path}= C:${/}webdriver${/}chromedriver.exe${url}=     google.com

*** Keywords ***
${dict} Create Dictonary executable_path=${Driver_Path}
Create Webdriver    driver_name=Chrome  kwargs=${dict} Maximize Browser Window Go To${url}


set up a environment variable like this:

Set Environment Variable    webdriver.chrome.driver   C:\webdriver\chromedriver.exe