Может ли кто-нибудь сообщить мне, как загрузить файл с помощью Selenium посредством Java-кода?
Когда я нажимаю на кнопку в приложении, оно открывается в новом окне, которое я могу использовать для выбора загружаемого файла. Кнопка просмотра разработана в Silverlight (C#).
Сначала убедитесь, что элемент ввода видимый.
Как заявил Марк Коллин в обсуждении здесь:
Don't click on the browse button, it will trigger an OS level dialog (диалог на уровне ОС) окно и фактически остановит ваш тест.
Вместо этого вы можете использовать:
driver.findElement(By.id("myUploadElement")).sendKeys("<absolutePathToMyFile>");
.
myUploadElement - это id элемента (в данном случае кнопки), а в sendKeys вы должны указать абсолютный путь к содержимому, которое вы хотите загрузить (изображение, видео и т.д.). Selenium сделает все остальное за вас.
Имейте в виду, что загрузка будет работать только если элемент, которому вы отправляете файл, должен иметь вид <input type="file">
.
driver.findElement(By.id("urid")).sendKeys("drive:\\path\\filename.extension");
Это то, что я использую, чтобы загрузить изображение через окно загрузки:
//open upload window
upload.click();
//put path to your image in a clipboard
StringSelection ss = new StringSelection("C:\\IMG_3827.JPG");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
//imitate mouse events like ENTER, CTRL+C, CTRL+V
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
сделано
Если у вас есть текстовое поле для ввода пути к файлу, просто используйте sendkeys для ввода пути к файлу и нажмите на кнопку отправки. Если у вас нет текстового поля для ввода пути к файлу, а есть только возможность нажать на кнопку browse и выбрать файл из всплывающего окна, вы можете использовать инструмент AutoIt, см. следующие шаги по использованию AutoIt для этого,
Скачайте и установите программу AutoIt с сайта http://www.autoitscript.com/site/autoit/.
Откройте программы -> Autoit tool -> SciTE Script Editor.
Вставьте следующий код в редактор Autoit и сохраните его как "filename.exe " (например: new.exe)
Затем скомпилируйте и соберите файл, чтобы сделать его exe. (Инструменты → Компиляция)
Код Autoit:
WinWaitActive("File Upload"); Name of the file upload window (Windows Popup Name: File Upload)
Send("logo.jpg"); File name
Send("{ENTER}")
Затем Compile and Build из меню Tools инструмента Autoit -> SciTE Script Editor.
Вставьте приведенный ниже Java-код в редактор Eclipse и сохраните его
Java код:
driver.findElement(By.id("uploadbutton")).click; // open the Upload window using selenium
Thread.sleep("20000"); // wait for page load
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "C:\\Documents and Settings\\new.exe"); // Give path where the exe is saved.
Я пытался использовать вышеуказанный робот необходимо добавить задержку :( также нельзя отлаживать или сделать что-то еще, потому что вы теряете фокус :(
окно //открыть загрузить загрузить.нажмите кнопку();
//put path to your image in a clipboard
StringSelection ss = new StringSelection(file.getAbsoluteFile());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
//imitate mouse events like ENTER, CTRL+C, CTRL+V
Robot robot = new Robot();
robot.delay(250);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.delay(50);
robot.keyRelease(KeyEvent.VK_ENTER);
Найти тег тип=на"файл"
. это Основной тег, который поддерживается селен. Если вы сможете построить свой XPath С же, когда рекомендуется.
Как показано ниже :-
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"Lighthouse.jpg"");
Thread.sleep(5000);
driver.findElement(By.xpath("//button[@id='Upload']")).click();
Для отправки нескольких файлов ставим все файлы по одному sendkeys и затем нажать кнопку Отправить
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"Lighthouse.jpg"");
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"home.jpg");
driver.findElement(By.xpath("//input[@id='files']")).sendKeys("D:"+File.separator+"images"+File.separator+"tsquare.jpg");
Thread.sleep(5000);
driver.findElement(By.xpath("//button[@id='Upload']")).click(); // Upload button