2016-05-12 92 views
2
上傳文件

有人可以幫助我如何使用selenium2library和機器人Framework.I已經使用選擇在selenium2library文件命令試圖上傳從Windows目錄下的文件,但我得到錯誤的文件沒有按」 t存在於本地文件系統中。我不確定是否不考慮目錄路徑或任何其他問題。請給我有效的代碼或任何替代solution.Any幫助將是appreciated.Following是我試圖如何從Windows目錄使用selenium2library和機器人框架

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

HTML標籤是'

Image location and HTML tag`

+0

使用這個網站,並嘗試在你自己的。但是這使用自動IT而不是機器人。這兩個工具都用於處理基於窗口的彈出窗口。所以試試這個吧。祝你好運。 http://toolsqa.com/selenium-webdriver/autoit-selenium-webdriver/ –

+1

您需要提供完整路徑。 –

+0

@FlorentB。完全路徑後無法檢測。請按照以下路徑進行操作。選擇文件\t xpath = //輸入[@ firmware-upgrade ='firmware'] \t \t C:/Users/mra001/Downloads/Cambium_Builds/Falcon/ePMP1000-Hotspot-2.5.1-b3.tar – Madhu

回答

-1

硒提供上傳選項的命令使用send_keys()方法的文件。我不知道你在用什麼語言,所以我會在Python中提供一個例子。

在截圖中,我可以看到,這是你的輸入元素:

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

假設你已經發現這個元素,並保存在元素變量。 如果我們想要上傳一個文件,我們只需要使用send_keys()方法並將文件路徑作爲參數。

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

這樣就沒有必要使用機器人這一點。

+0

而不是給作者的極其簡單的問題的解決方案(這是佛羅倫特順便說一句:http://stackoverflow.com/questions/37183182/how-to-upload-file-from-windows-directory-using-selenium2library-and -robot-frame/37189445?noredirect = 1#comment61907295_37183182)你建議他切換框架。那有什麼用呢? – jim

+0

他已經在使用硒。他想做一個文件上傳,並使用一個Robot框架(很可能是因爲硒不能處理操作系統級別的對話框)。我所建議的是,他可能想利用硒附帶的上傳功能,而不是使用機器人。 – RemcoW

+0

這不是射頻如何工作,你不包括它硒。 RF本身利用硒作爲潛在驅動因素之一。如果您已經知道Robot Framework是什麼以及它是如何工作的,那麼您就不會犯這個錯誤。 – jim

4

感謝每一個爲你的答案和時間,但幸運的是下面的腳本幫助我從窗戶上載文件及其工作fine.There可能是不同的選項來執行使用AutoIt的一樣,但我試圖用什麼我知道。

***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 
+1

與問題無關,但依然:如果將「睡眠70」更改爲另一個「等到元素可見」,則可以節省一些時間。 – jim

+0

@jim我知道它與我提出的問題無關,但我已經嘗試過使用AutoIT和其他選項,但它們並不適合我。我已經嘗試了我所知道的任何方法。我會用等到元素可見,而不是睡覺..感謝您的評論 – Madhu

+0

Thx。雙反斜槓,到底是什麼。因此,幾個小時的搜索。 –

0

點擊瀏覽按鈕打開使用Robot Framework的彈出窗口後,您可以執行如下操作來提交文件。

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); 
    } 
} 

機器人類

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]); 
    } 
}