как же селен WebDriver загружать файлы в браузер?

голоса
34

Я разработчик JavaScript / Java и я пытаюсь выяснить, как Селен 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 Я до сих пор не в состоянии найти , где они это делают.

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

Задан 20/12/2012 в 01:58
источник пользователем
На других языках...                            


6 ответов

голоса
17

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

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

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

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

Ответил 20/12/2012 в 07:57
источник пользователем

голоса
4

Функции загрузки Windowns файла HTML кода:

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

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

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

driver.FileDetector = new LocalFileDetector();
FindElement(By.Id("fileField")).SendKeys(@"C:\Users\admin\Desktop\ProfessionCodes.txt"); FindElement(By.CssSelector("input[type='submit']")).Click();
Ответил 31/07/2013 в 09:17
источник пользователем

голоса
2

Я Загрузил фото на Facebook с помощью Selenium WebDriver и AutoIt

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

Шаг 1

На затмении коды 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 : Добавьте код в файл сценария , как показано ниже:

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 : Запуск сценария ( PhotoUpload.java)

Шаг 7 : Фото получить успешно загружены.

Ответил 03/09/2013 в 13:05
источник пользователем

голоса
0

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

Код:

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

        }
    }
Ответил 15/04/2014 в 07:37
источник пользователем

голоса
0

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

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

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

Ответил 04/03/2013 в 19:52
источник пользователем

голоса
0
  //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");

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

Ответил 20/12/2012 в 05:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more