2011-12-29 70 views

Respuesta

4

El control de entrada de carga abre un diálogo nativo (lo hace el navegador) por lo que al hacer clic en el botón de control o exploración a través de Selenium se abrirá el cuadro de diálogo y la prueba se bloqueará.

La solución consiste en establecer el valor de la entrada de carga mediante JavaScript (en Java se realiza a través de JavascriptExecutor) y luego enviar el formulario.

Ver this question para la muestra en C#, estoy seguro de que hay también una manera de llamar a JavaScript en Python, pero nunca he utilizado fijaciones selenio Python

+0

Esto no es una solución válida, ver https://stackoverflow.com/questions/29720794/jquery-select-input- file-and-also-set-it-to-another-input – Will

79

Lo que estoy haciendo es esto (asegúrese de DRV es una instancia de WebDriver):

drv.find_element_by_id("IdOfInputTypeFile").send_keys(os.getcwd()+"/image.png") 

y luego encuentre su botón enviar y haga clic en él.

+7

Esta debería ser la respuesta aceptada. –

+0

Sí ¡Esta debería ser la respuesta aceptada! –

+0

¿Puede explicar qué '' os.getcwd() 'hace y dónde en su ejemplo' image.png' está ubicado en su sistema de archivos. – ChickenFeet

4

¡¡Todos estos enfoques no funcionarán con los cargadores de imágenes modernos en OLX !!! enfoque alternativo (sólo para Windows)

1. Automation of windows can be done using Autoit 
2. Install Autoit and SciTe Script editor 
3. Autoit code :(imageupload.au3) 

WinActivate("File Upload"); for chrome use "open" that is the name of the window that pops 
send("D:\images\image1.png"); path of the file 
Send("{ENTER}") 

4. compile it to get an .exe file(imageupload.exe) 
5. Now from python call the .exe file like 

import os 
import os.system('C:\images\imageupload.exe') #path of the .exe file 
+0

¿Puedes dar un ejemplo claro, importas el exe y cómo lo llamas exactamente? – 2one2

+0

¡No! crea un nuevo archivo autoit con las tres líneas que he dado en mi 3er punto. Refiérete a esto para convertirlo en el archivo .exe https://www.autoitscript.com/autoit3/docs/intro/compiler.htm y luego puedes llamar al archivo exe de la secuencia de comandos python usando las dos líneas que he dado en el 5º punto – saravanan

0

he utilizado a continuación formato de secuencia de comandos para cargar las imágenes. Esto puede ayudarte.

Imagepath=os.path.abspath('.\\folder1\\subfolder2\file1.jpg') 
    driver.find_element_by_id("Id of the element").clear()    
    driver.find_element_by_id("Id of the element").send_keys(Imagepath) 

si no tiene el ID del objeto, entonces puede usar el selector xpath o css en consecuencia.

1
import win32com.client 

shell = win32com.client.Dispatch("WScript.Shell") 
shell.Sendkeys("C:\text.txt") 
shell.Sendkeys("~") 

resolverá el problema

+0

Hola Necesito su ayuda aquí, estoy tratando de cargar el archivo de imagen y usar este código, pero no funciona para seleccionar el archivo. No activa las teclas de evento o ficha. ¿Podrías ayudarme? –

0

estoy usando fine-uploader, la realización de pruebas de selenio con PYtest y esto funcionó para mí:

elm = driver.find_element_by_xpath("//input[@type='file']") 
    elm.send_keys(os.getcwd() + "/tests/sample_files/Figure1.tif") 

Sin formulario de presentación o Enter se necesita clave en mi caso.

¡Gracias por todas las respuestas! ¡Ayudó mucho!

0

El uso de astilla:

browser.attach_file ('file_chooser_id', fully_qualified_file_path)

1

que agregó una respuesta para cualquiera que quiera usar trato con los msofiledialogs molestos. Esto funciona a partir de la solución propuesta por Saravanan, pero más desarrollada para Python.

Tuve un problema similar con un script en el que estoy trabajando para una empresa.Intento subir documentos para los clientes de una empresa, pero debido a la forma en que funcionaba su sitio, no pude utilizar send_keys para enviar directamente la ruta, así que tuve que confiar en msofiledialog.

  1. Sólo es necesario instalar AutoIt https://pypi.python.org/pypi/PyAutoIt/0.3 o simplemente "PIP instalación -U pyautoit" a través de la pantalla cmd

  2. tipo "autoit importación" en la página de guión

  3. Escriba el siguiente antes de que el cuadro de diálogo de archivo aparezca en su secuencia de comandos:

    autoit.win_active ("Abrir") autoit.control_send ("Abrir", "Editar1", r "C: \ Users \ uu \ Desktop \ TestUplo ad.txt ") autoit.control_send (" abierto", "Edit1", "{ENTER}")

Se buscará la ventana de diálogo de archivo abierto y llenarlo y pulse enter. "Abrir" es el título de la pantalla de diálogo de mi archivo. Pon el título tuyo en lugar de "Abrir". Hay formas más creativas de utilizar las funciones de AutoIt, pero esta es una manera fácil y directa para los principiantes.

Edit: DO NOT. NO use control_send en la mayoría de las cosas si puede evitarlo. Tiene un problema bien conocido de envío de texto erróneo. En mi caso, el colon en mi ruta de archivo se estaba convirtiendo en un punto y coma. Si necesita enviar claves de entrada, debería estar bien; sin embargo, si necesita enviar texto, use control_set_text. Tiene la misma sintaxis.

autoit.control_set_text("Open","Edit1",r"C:\Users\uu\Desktop\TestUpload.txt") 
Cuestiones relacionadas