33

Sono uno sviluppatore javascript/java e ho cercato di capire come il framework di automazione del selenio webdriver carica i file dal file system. È impossibile impostare un input di file tramite javascript perché si tratta di una violazione della sicurezza. Eppure in qualche modo WebDriver è in grado di fare questo con il seguente comando:in che modo il selenio web driver carica i file sul browser?

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

Così stanno impostando il valore con l'invio di chiavi ad esso? Non capisco Ho guardato attraverso il codice sorgente trovato qui: http://code.google.com/p/selenium/source/checkout Non riesco ancora a trovare dove lo fanno.

Edit: La mia domanda non è come fare questo con il selenio, ma come hanno reso possibile gli sviluppatori di selenio? Come hanno fatto a superare le restrizioni di sicurezza in javascript? Come stanno caricando il file?

+0

La mia prima risposta è che l'elemento pulsante ha un 'valore' ad esso, e sendkeys aggiunge caratteri al valore? – djangofan

risposta

17

Nizza compagno domanda ... che hanno scritto un proxy HTTP per risolvere le restrizioni secuirty Javascript. L'utilizzo di questo proxy ha consentito di eseguire il side-step di molti dei vincoli della politica di "stessa origine host", in cui un browser non consente a JavaScript di effettuare chiamate a qualcos'altro oltre al server da cui è stata fornita la pagina corrente.

Inoltre WebDriver utilizza l'approccio alternativo degli eventi di attivazione a livello di sistema operativo. Poiché questi "eventi nativi" non sono generati dal browser, questo approccio elude le restrizioni di sicurezza poste sugli eventi sintetizzati e, poiché sono specifici del sistema operativo, una volta che funzionano per un browser su una particolare piattaforma il riutilizzo del codice in un altro browser è relativamente facile.

maggior parte dei contenuti sopra è fatto riferimento dal below..do ​​leggere il seguente riferimento per maggiori dettagli su Selenio interni

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

+0

Vedere la mia risposta qui sotto. – djangofan

0
//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"); 

Prova questo e fammi sapere

+0

Mi dispiace di non essere stato chiaro nella mia domanda. Ho aggiunto un chiarimento alla domanda. Vorrei sapere come sono riusciti gli sviluppatori di selenio a rendere possibile ciò che hai descritto. – justspamjustin

0

In alcuni casi specialmente con Java è necessario creare un oggetto File e passare l'AbsolutePath() al driver, come la seguente:

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

Esempio di file è una stringa che punta al file che deve essere caricato. Questo funziona per me in Firefox e Chrome.

4

I codici funzione di file HTML windowns di upload sono:

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

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

È possibile utilizzare i seguenti codici per finire il caricamento di un file di Windows. Funziona con successo e i codici non includono il clic su un'azione di caricamento.

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

Ho foto caricata su Facebook Utilizzando Selenio WebDriver e AutoIt

passi sono i sotto

Fase 1

Il Codice Eclipse Fino (Carica una foto) è come di seguito:

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

Fase 2

scaricato e installare AutoIt: http://www.autoitscript.com/site/autoit/downloads/ (Download ZIP)

Fase 3

scrivere il codice, come di seguito in Blocco note e salvati come PhotoUpload.au3

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

Passaggio 4 : Fare clic con il tasto destro su questo file .au3 & compilarlo.

Fase 5: Aggiungere il codice nel file di script come di seguito:

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

Passo 6: Esegui script (PhotoUpload.java)

Passo 7: Foto ottenere caricato con successo.

+0

puoi dire con alcuni screenshot per la codifica e anche l'interfaccia utente? –

0

Questo mi ha aiutato a fare upload di file,

Codice:

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

     } 
    } 
Problemi correlati