2016-05-12 3 views
2

Может кто-нибудь помочь мне Как загрузить файл из каталога Windows с помощью selenium2library и Robot Framework. Я попытался использовать команду «Выбрать файл» в selenium2library, но я получаю ошибку, поскольку File doesn ' t существует в локальной файловой системе. Я не уверен, что путь каталога не рассматривается или какая-либо другая проблема. Пожалуйста, дайте мне правильный код или любой альтернативный solution.Any помощь будет appreciated.Following это команда, которую я попробовалКак загрузить файл из каталога Windows с помощью selenium2library и Robot Framework

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

Используйте этот сайт и попробовать его на свой собственный. Но это использует Auto IT not Robot. Оба инструмента используются для обработки всплывающих окон на основе окон. Так что попробуй. Удачи. http://toolsqa.com/selenium-webdriver/autoit-selenium-webdriver/ –

+1

Вам необходимо указать полный путь. –

+0

@FlorentB. Он не может обнаружить после прохождения полного пути. Прошел следующий путь. Выберите файл \t xpath = // input [@ 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

Спасибо всем за ответы и время, но, к счастью, следующий сценарий помог мне загрузить файл из окон и его работоспособность. Могут быть разные варианты выполнения с помощью 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 и другими параметрами, которые не работали для меня. Я пробовал все, что знаю. Я буду использовать wait, пока элемент не будет виден вместо сна. Спасибо за ваш комментарий – 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]); 
    } 
} 
Смежные вопросы