2011-12-29 15 views

risposta

4

Il controllo di caricamento del caricamento apre una finestra di dialogo nativa (fatta dal browser), quindi facendo clic sul pulsante di controllo o di navigazione tramite Selenium si aprirà la finestra di dialogo e il test si bloccherà.

La soluzione è impostare il valore dell'ingresso di caricamento tramite JavaScript (in Java viene eseguito tramite JavascriptExecutor) e quindi inviare il modulo.

Vedi this question per il campione in C#, sono sicuro che c'è anche un modo per chiamare JavaScript in Python, ma non ho mai usato Selenio Python binding

+0

Questa non è una soluzione valida, vedere https://stackoverflow.com/questions/29720794/jquery-select-input- file-e-anche-set-it-to-another-input – Will

79

Quello che sto facendo è questo (assicurarsi drv è un'istanza di WebDriver):

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

e quindi trovare il pulsante di invio e fare clic su di esso.

+7

Questa dovrebbe essere la risposta accettata. –

+0

Sì Questa dovrebbe essere la risposta accettata! –

+0

Potete per favore elaborare cosa 'os.getcwd()' fa e dove nel vostro esempio 'image.png' si trova sul vostro file system. – ChickenFeet

4

Tutto questo approccio non funzionerà con i moderni uploader di immagini in olx !!! approccio alternativo (solo per 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

puoi dare un chiaro esempio, importi l'exe e come lo chiami esattamente? – 2one2

+0

No! crea un nuovo file autoit con le tre linee che ho dato nel mio terzo punto. Riferiscilo per convertirlo nel file .exe https://www.autoitscript.com/autoit3/docs/intro/compiler.htm quindi puoi chiamare il file exe dallo script python usando le due linee che ho dato in 5 ° punto – saravanan

0

ho utilizzato al di sotto formato di script per caricare le immagini. Questo potrebbe aiutarti.

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) 

se non si dispone di ID dell'oggetto, quindi è possibile utilizzare XPath o selettore CSS di conseguenza.

1
import win32com.client 

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

risolverà il problema

+0

Ciao ho bisogno del tuo aiuto qui, sto cercando di caricare il file immagine e utilizzare questo codice, ma non funziona per selezionare file.its non spara inserire i tasti evento o scheda. Potete per favore aiutarmi? –

0

Sto usando fine-uploader, l'esecuzione di test di selenio con pytest e questo ha funzionato per me:

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

Nessun modulo di presentazione o il tasto Enter è necessaria nel mio caso.

Grazie per tutte le risposte! Ha aiutato molto!

0

Utilizzando scheggia:

browser.attach_file ('file_chooser_id', fully_qualified_file_path)

1

ho aggiunto una risposta per tutti coloro che cercano di utilizzare accordo con i msofiledialogs fastidiosi. Questo sta funzionando sulla soluzione proposta da saravanan, ma più sviluppata per Python.

Ho avuto un problema simile con una sceneggiatura a cui sto lavorando per un'azienda al suo fianco.Sto tentando di caricare documenti per i clienti di un'azienda, ma a causa del modo in cui il loro sito ha funzionato, non ho potuto utilizzare send_keys per inviare direttamente il percorso, quindi ho dovuto affidarmi a msofiledialog.

  1. Hai solo bisogno di installare AutoIt https://pypi.python.org/pypi/PyAutoIt/0.3 o semplicemente "PIP installare -U pyautoit" attraverso lo schermo cmd

  2. tipo "importazione autoit" sulla tua pagina sceneggiatura

  3. Digitare il seguente prima che la finestra di dialogo file si apre nello script:

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

Si cercherà la finestra di dialogo file aperto e compilarlo e premere invio. "Apri" è il titolo della schermata di dialogo del mio file. Metti il ​​tuo titolo al posto di "Apri". Esistono modi più creativi per utilizzare le funzioni di AutoIt, ma questo è un modo semplice e diretto per i principianti.

Modifica: NON. NON usare control_send sulla maggior parte delle cose se puoi evitarlo. Ha un problema ben noto di invio di testo errato. Nel mio caso, i due punti nel mio percorso di file venivano trasformati in un punto e virgola. Se hai bisogno di inviare le chiavi di input, dovrebbe andare bene, tuttavia se hai bisogno di inviare del testo, usa control_set_text. Ha la stessa sintassi.

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