4
votes

Can someone help me How to Upload file from windows directory using selenium2library and Robot Framework.I have tried using Choose File command in selenium2library but I am getting error as File doesn't exist in local file system.I am not sure whether directory path is not considered or any other issue. Please give me valid code or any alternate solution.Any help would be appreciated.Following is the command I have tried

Choose file     xpath = //input[@firmware-upgrade='firmware']       /Downloads/Cambium_Builds/Falcon/ePMP1000-Hotspot-2.5.1-b3.tar

HTML tag is `

Image location and HTML tag`

3
Use this site and try it on your own. But this uses Auto IT not Robot. Both tools are used to handle windows based pop ups. So give this a try. GoodLuck. toolsqa.com/selenium-webdriver/autoit-selenium-webdriverLalindra Kawshika
You need to provide the full path.Florent B.
@FlorentB. It is unable to detect after giving full path.Tried following path. Choose file xpath = //input[@firmware-upgrade='firmware'] C:/Users/mra001/Downloads/Cambium_Builds/Falcon/ePMP1000-Hotspot-2.5.1-b3.tarAuto-learner
Have you tried with the file scheme: file:///C:/Users/... ?Florent B.
Is there a reason you don't upload those files using just selenium?RemcoW

3 Answers

6
votes

Thanks every one for your answers and time,but luckily following script helped my uploading a file from windows and its working fine.There might be different options to perform the same using AutoIT but I have tried with whatever i know.

***Settings***
Library  Selenium2Library


*** Variables ***
${Browser_Chrome}           Chrome
${Device_77_URL}        https://10.110.0.17
${Device_Path}          C:\\Users\\mra001\\Downloads\\Builds\\Gambit\\500-2.5.1-b3.img

*** Keywords ***


Software Update 
    Open Browser    ${Device_77_URL}    Chrome
    Input Text      id=Username  admin
    Input Text      password=Password    admin
    Click Button    xpath = //button[@type='submit']
    Wait Until Element Is Visible       //a[text()='Home']      20
    Click Link      xpath = //a[text()='Operations ']
    Input Text  xpath = //input[@firmware-upgrade='firmware']  ${Device_Path}
    Click Button        Upgrade Firmware
    Sleep       70
    Confirm Action
    Close Browser
0
votes

After clicking the browse button to open the popup using Robot Framework you can do something like the following to submit a file.

public static void robotwrite() throws Exception{
    try{
        RobotWrite rw = new RobotWrite();
        rw.type("C:\\Desktop\\Example.docx");
        Robot r = new Robot();
        r.keyPress(VK_ENTER);
        r.keyRelease(VK_ENTER);
    }catch (Exception e){
        Log.error("Could not write");
        throw(e);
    }
}

Robot Class

import static java.awt.event.KeyEvent.*;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class RobotWrite {

    private Robot robot;

    public RobotWrite() throws AWTException {
        this.robot = new Robot();
    }



    public void type(CharSequence characters) throws AWTException {
        int length = characters.length();
        for (int i = 0; i < length; i++) {
            char character = characters.charAt(i);
            type(character);
        }
    }

    public void type(char character) throws AWTException {
        switch (character) {
        case 'a': doType(VK_A); break;
        case 'b': doType(VK_B); break;
        case 'c': doType(VK_C); break;
        case 'd': doType(VK_D); break;
        case 'e': doType(VK_E); break;
        case 'f': doType(VK_F); break;
        case 'g': doType(VK_G); break;
        case 'h': doType(VK_H); break;
        case 'i': doType(VK_I); break;
        case 'j': doType(VK_J); break;
        case 'k': doType(VK_K); break;
        case 'l': doType(VK_L); break;
        case 'm': doType(VK_M); break;
        case 'n': doType(VK_N); break;
        case 'o': doType(VK_O); break;
        case 'p': doType(VK_P); break;
        case 'q': doType(VK_Q); break;
        case 'r': doType(VK_R); break;
        case 's': doType(VK_S); break;
        case 't': doType(VK_T); break;
        case 'u': doType(VK_U); break;
        case 'v': doType(VK_V); break;
        case 'w': doType(VK_W); break;
        case 'x': doType(VK_X); break;
        case 'y': doType(VK_Y); break;
        case 'z': doType(VK_Z); break;
        case 'A': doType(VK_SHIFT, VK_A); break;
        case 'B': doType(VK_SHIFT, VK_B); break;
        case 'C': doType(VK_SHIFT, VK_C); break;
        case 'D': doType(VK_SHIFT, VK_D); break;
        case 'E': doType(VK_SHIFT, VK_E); break;
        case 'F': doType(VK_SHIFT, VK_F); break;
        case 'G': doType(VK_SHIFT, VK_G); break;
        case 'H': doType(VK_SHIFT, VK_H); break;
        case 'I': doType(VK_SHIFT, VK_I); break;
        case 'J': doType(VK_SHIFT, VK_J); break;
        case 'K': doType(VK_SHIFT, VK_K); break;
        case 'L': doType(VK_SHIFT, VK_L); break;
        case 'M': doType(VK_SHIFT, VK_M); break;
        case 'N': doType(VK_SHIFT, VK_N); break;
        case 'O': doType(VK_SHIFT, VK_O); break;
        case 'P': doType(VK_SHIFT, VK_P); break;
        case 'Q': doType(VK_SHIFT, VK_Q); break;
        case 'R': doType(VK_SHIFT, VK_R); break;
        case 'S': doType(VK_SHIFT, VK_S); break;
        case 'T': doType(VK_SHIFT, VK_T); break;
        case 'U': doType(VK_SHIFT, VK_U); break;
        case 'V': doType(VK_SHIFT, VK_V); break;
        case 'W': doType(VK_SHIFT, VK_W); break;
        case 'X': doType(VK_SHIFT, VK_X); break;
        case 'Y': doType(VK_SHIFT, VK_Y); break;
        case 'Z': doType(VK_SHIFT, VK_Z); break;
        case '`': doType(VK_BACK_QUOTE); break;
        case '0': doType(VK_0); break;
        case '1': doType(VK_1); break;
        case '2': doType(VK_2); break;
        case '3': doType(VK_3); break;
        case '4': doType(VK_4); break;
        case '5': doType(VK_5); break;
        case '6': doType(VK_6); break;
        case '7': doType(VK_7); break;
        case '8': doType(VK_8); break;
        case '9': doType(VK_9); break;
        case '-': doType(VK_MINUS); break;
        case '=': doType(VK_EQUALS); break;
        case '~': doType(VK_SHIFT, VK_BACK_QUOTE); break;
        case '!': doType(VK_EXCLAMATION_MARK); break;
        case '@': doType(VK_AT); break;
        case '#': doType(VK_NUMBER_SIGN); break;
        case '$': doType(VK_DOLLAR); break;
        case '%': doType(VK_SHIFT, VK_5); break;
        case '^': doType(VK_CIRCUMFLEX); break;
        case '&': doType(VK_AMPERSAND); break;
        case '*': doType(VK_ASTERISK); break;
        case '(': doType(VK_LEFT_PARENTHESIS); break;
        case ')': doType(VK_RIGHT_PARENTHESIS); break;
        case '_': robot.keyPress(KeyEvent.VK_SHIFT); robot.keyPress(KeyEvent.VK_MINUS); robot.keyRelease(KeyEvent.VK_SHIFT); break;
        case '+': doType(VK_PLUS); break;
        case '\t': doType(VK_TAB); break;
        case '\n': doType(VK_ENTER); break;
        case '[': doType(VK_OPEN_BRACKET); break;
        case ']': doType(VK_CLOSE_BRACKET); break;
        case '\\': doType(VK_BACK_SLASH); break;
        case '{': doType(VK_SHIFT, VK_OPEN_BRACKET); break;
        case '}': doType(VK_SHIFT, VK_CLOSE_BRACKET); break;
        case '|': doType(VK_SHIFT, VK_BACK_SLASH); break;
        case ';': doType(VK_SEMICOLON); break;
        case ':': robot.keyPress(KeyEvent.VK_SHIFT);
        robot.keyPress(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SEMICOLON);
        robot.keyRelease(KeyEvent.VK_SHIFT); break;
        case '\'': doType(VK_QUOTE); break;
        case '"': doType(VK_QUOTEDBL); break;
        case ',': doType(VK_COMMA); break;
        case '<': doType(VK_SHIFT, VK_COMMA); break;
        case '.': doType(VK_PERIOD); break;
        case '>': doType(VK_SHIFT, VK_PERIOD); break;
        case '/': doType(VK_SLASH); break;
        case '?': doType(VK_SHIFT, VK_SLASH); break;
        case ' ': doType(VK_SPACE); break;
        default:
            throw new IllegalArgumentException("Cannot type character " + character);
        }
    }

    private void doType(int... keyCodes) {
        doType(keyCodes, 0, keyCodes.length);
    }

    private void doType(int[] keyCodes, int offset, int length) {
        if (length == 0) {
            return;
        }

        robot.keyPress(keyCodes[offset]);
        doType(keyCodes, offset + 1, length - 1);
        robot.keyRelease(keyCodes[offset]);
    }
}
-1
votes

Selenium provides the option to upload files using the send_keys() method. I don't know what language you are using so I'll provide an example in Python.

In the screenshot I can see that this is your input element:

<input type="file" firmware-upgrade="firmware"/>

Assume you have found this element and saved in the element variable. If we want to upload a file to this all we need to do is use the send_keys() method and give the filepath as argument.

element = function_to_locate_element()
element.send_keys('path\\to\\file')

This way there is no need to use the robot for this.