Search code examples
javascriptselenium-rc

Selenium RC > how to upload file using attachFile()


I am using Selenium RC with Junit framework. I am trying to upload a file using attachFile() method.

attachFile: (Information collected from selenium API http://release.seleniumhq.org/selenium-remote-control/1.0-beta-2/doc/java/com/thoughtworks/selenium/Selenium.html#attachFile(java.lang.String,%20java.lang.String))

void attachFile(java.lang.String fieldLocator,
            java.lang.String fileLocator)

Sets a file input (upload) field to the file listed in fileLocator

Parameters:
    fieldLocator - an element locator
    fileLocator - a URL pointing to the specified file. Before the file can be set
  in the input field (fieldLocator), Selenium RC may need to transfer the file to 
  the local machine before attaching the file in a web page form. This is common in 
  selenium grid configurations where the RC server driving the browser is not the 
  same machine that started the test. Supported Browsers: Firefox ("*chrome") only.

Can anyone please tell me how to define "fileLocator". I am not getting which URL to be specify over here. Please give me an example if possible.


Solution

  • I got solution for this, use selenium.focus method and the selenium.keyPressNative/keyReleaseNative methods.

    You will need to give focus to the text box using:

    selenium.focus("text box locator");

    Then if your input file is C:\tools\File.txt you need to type the letters like so:

    selenium.keyDownNative("16"); //SHIFT ON

    selenium.keyPressNative("67"); // c shift makes it C

    selenium.keyPressNative("59"); // ; Shift makes it : (you can't do colon directly)

    selenium.keyUpNative("16"); // SHIFT OFF

    selenium.keyPressNative("47"); // slash

    selenium.keyPressNative("84"); // t

    selenium.keyPressNative("79"); // o

    selenium.keyPressNative("79"); // o

    selenium.keyPressNative("76"); // l

    selenium.keyPressNative("83"); // s

    selenium.keyPressNative("47"); // slash

    selenium.keyDownNative("16"); //SHIFT ON

    selenium.keyPressNative("70"); // f shift makes it F

    selenium.keyUpNative("16"); // SHIFT OFF

    selenium.keyPressNative("73"); // i

    selenium.keyPressNative("76"); // l

    selenium.keyPressNative("69"); // e

    selenium.keyPressNative("46"); // .

    selenium.keyPressNative("84"); // t

    selenium.keyPressNative("88"); // x

    selenium.keyPressNative("84"); // t

    selenium.keyPressNative("10"); // Enter

    selenium.keyReleaseNative("10"); // Enter

    I've ended the sequqnce with an 'Enter' character. Sometimes this doesn't work so you may need to click the button (if you know the element locator for it).