Подтвердить что ты не робот

Как selenium webdriver загружает файлы в браузер?

Я разработчик javascript/java, и я пытался выяснить, как система автоматизации selenium webdriver загружает файлы из файловой системы. Невозможно установить входной файл через javascript, потому что это нарушение безопасности. Однако как-то webdriver может сделать это с помощью следующей команды:

driver.setFileDetector(new LocalFileDetector());
WebElement upload = driver.findElement(By.id("myfile"));
upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg");
driver.findElement(By.id("submit")).click();

Значит, они устанавливают значение, отправляя ему ключи? Я не понимаю. Я просмотрел исходный код, найденный здесь: http://code.google.com/p/selenium/source/checkout Я все еще не могу найти, где они это делают.

Изменить: Мой вопрос заключается не в том, как это сделать с селеном, но как это сделали разработчики селена? Как они обошли ограничения безопасности в javascript? Как они загружают файл?

4b9b3361

Ответ 1

Хороший собеседник... они написали прокси-сервер HTTP для разрешения ограничений на Javascript secuirty. Используя этот прокси-сервер, вы можете перекрыть многие ограничения политики "того же самого хоста", где браузер не позволит Javascript совершать звонки на что-либо, кроме сервера, с которого была отправлена ​​текущая страница.

Кроме того, WebDriver использует альтернативный подход для запуска событий на уровне ОС. Поскольку эти "нативные события" не генерируются браузером, этот подход обходит ограничения безопасности, помещенные в синтезированные события, и, поскольку они являются специфичными для ОС, как только они работают для одного браузера на конкретной платформе, повторное использование кода в другом браузере относительно легко.

В большинстве приведенных выше ссылок ссылка приведена ниже.. прочитайте следующую ссылку для более подробной информации о внутренних функциях Selenium

http://www.aosabook.org/en/selenium.html

Ответ 2

Функциями HTML файлов загрузки выдается:

<input id="fileField" type="file" onchange="document.getElementById('textfield').value=this.value" name="position">   

<input type="submit" value="导入">

Вы можете использовать следующие коды для завершения загрузки файла Windows. Он работает успешно, и коды не включают щелчок по действию загрузки.

driver.FileDetector = new LocalFileDetector();
FindElement(By.Id("fileField")).SendKeys(@"C:\Users\admin\Desktop\ProfessionCodes.txt"); FindElement(By.CssSelector("input[type='submit']")).Click();

Ответ 3

У меня есть Загруженная фотография на Facebook с помощью Selenium Webdriver и AutoIt

Шаги, как показано ниже

Шаг 1

В коде eclipse Upto (Загрузить фотографию):

WebElement Upload = Firefox.findElement(By.cssSelector("input[id^='u_']"));
Upload.click();

Шаг 2

Загружено и установлено AutoIt: http://www.autoitscript.com/site/autoit/downloads/ (Скачать ZIP)

Шаг 3

Запишите код, указанный ниже в блокноте, и сохраните его как PhotoUpload.au3

WinWaitActive("File Upload")
Send("D:\Photo0116.jpg")   
Send("{ENTER}")

Шаг 4: щелкните правой кнопкой мыши на этом файле .au3 и скомпилируйте его.

Шаг 5: добавьте код в script файл, как показано ниже:

try {
    String[] commands = new String[]{};
    // Location of the autoit executable
    commands = new String[] {"D:\\My softwares\\install software\\selenium\\UploadPhoto3.exe"};
    Runtime.getRuntime().exec(commands);
}       
catch (IOException e) {}

Шаг 6: выполните script (PhotoUpload.java)

Шаг 7. Фото загрузится успешно.

Ответ 4

  //assuming driver is a healthy WebDriver instance
    WebElement fileInput = driver.findElement(By.name("uploadfile"));
   fileInput.sendKeys("C:/path/to/file.jpg");

или

 driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg");

Попробуйте это и дайте мне знать

Ответ 5

В некоторых случаях специально с Java вам нужно создать объект File и передать absolutePath() в драйвер, как показано ниже:

File file = new File(sampleFile);
driver.findElement(By.id("<Your input tag with type of File>")).sendKeys(file.getAbsolutePath());

Пример файла - это строка, указывающая на файл, который необходимо загрузить. Это работает для меня в Firefox и Chrome.

Ответ 6

Это помогло мне выполнить загрузку файлов,

Код:

 public class FileUpload {
        @Test
        public void test() {
            WebDriver driver = new FirefoxDriver();
            driver.get("http://www.freepdfconvert.com/pdf-word");
            driver.findElement(By.id("clientUpload")).click();
            driver.switchTo()
                    .activeElement()
                    .sendKeys(
                            "/home/likewise-open/GLOBAL/123/Documents/filename.txt");
            driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
            driver.findElement(By.id("convertButton"));
            /*
             * driver.switchTo().activeElement()
             * .sendKeys("selenium_2_testing_tools.pdf"); ;
             */
         {
                driver.wait(30000);
            } catch (Exception er) {
                System.out.println(er);
            }

        }
    }