¿cómo carga selenium webdriver archivos al navegador?


Soy un desarrollador javascript/java y he estado tratando de averiguar cómo el marco de automatización selenium webdriver carga archivos desde el sistema de archivos. Es imposible establecer una entrada de archivo a través de javascript porque es una violación de seguridad. Sin embargo, de alguna manera webdriver es capaz de hacer esto con el siguiente comando:

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

¿Entonces están configurando el valor enviando claves a él? No lo entiendo. He mirado a través del código fuente encontrado aqui: http://code.google.com/p/selenium/source/checkout Todavía no puedo encontrar dónde hacen esto.

Editar: Mi pregunta no es cómo hacer esto con selenium, pero ¿cómo lo hicieron posible los desarrolladores de selenium? ¿Cómo sortearon las restricciones de seguridad en javascript? ¿Cómo suben el archivo?

Author: justspamjustin, 2012-12-20

6 answers

Buena pregunta amigo...han escrito un proxy HTTP para resolver las restricciones de seguridad de Javascript. El uso de este proxy hizo posible eludir muchas de las restricciones de la política de "mismo origen de host", donde un navegador no permitirá que Javascript realice llamadas a nada que no sea el servidor desde el que se ha servido la página actual.

Además WebDriver utiliza el enfoque alternativo de disparar eventos a nivel del sistema operativo. Como estos "eventos nativos" no son generados por el navegador este enfoque evita las restricciones de seguridad impuestas a los eventos sintetizados y, debido a que son específicos del sistema operativo, una vez que están trabajando para un navegador en una plataforma en particular, reutilizar el código en otro navegador es relativamente fácil.

La mayor parte del contenido anterior se hace referencia desde el below..do lea la siguiente referencia para más detalles sobre los componentes internos del Selenio

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

 17
Author: Anuragh27crony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-20 06:57:02

Los códigos HTML de la función de archivo upload windowns son:

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

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

Puede usar los siguientes códigos para terminar de cargar un archivo de Windows. Funciona con éxito y los códigos no incluyen hacer clic en una acción de carga.

driver.FileDetector = new LocalFileDetector();
FindElement(By.Id("fileField")).SendKeys(@"C:\Users\admin\Desktop\ProfessionCodes.txt"); FindElement(By.CssSelector("input[type='submit']")).Click();
 4
Author: user2637184,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-31 08:37:27

He Subido una foto en Facebook Usando Selenium Webdriver y AutoIt

Los pasos son los siguientes

Paso 1

En el código de eclipse Hasta (Subir una foto) es como a continuación:

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

Paso 2

Descargado e instalar AutoIt: http://www.autoitscript.com/site/autoit/downloads / (Descargar ZIP)

Paso 3

Escriba el código como se muestra a continuación en el bloc de notas y lo guardó como PhotoUpload.au3

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

Paso 4 : Haga clic derecho en este archivo .au3 y compílelo.

Paso 5: Agregue código en el archivo de script de la siguiente manera:

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

Paso 6 : Ejecutar script (PhotoUpload.java)

Paso 7 : La foto se sube con éxito.

 2
Author: Vrushali Haldankar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-03 15:56:14
  //assuming driver is a healthy WebDriver instance
    WebElement fileInput = driver.findElement(By.name("uploadfile"));
   fileInput.sendKeys("C:/path/to/file.jpg");

O

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

Pruebe esto y hágamelo saber

 0
Author: Ankit jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-20 04:04:32

En algunos casos, especialmente con Java, necesita crear un objeto File y pasar el AbsolutePath () al Controlador, como lo siguiente:

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

El archivo de ejemplo es una cadena que apunta al archivo que necesita ser cargado. Esto funciona para mí en Firefox y Chrome.

 0
Author: pouyanghasemi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-04 18:52:50

Esto me ayudó a subir archivos,

Código:

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

        }
    }
 0
Author: Emmanuel Angelo.R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-15 06:37:44