Selenium RC> comment télécharger le fichier en utilisant attachFile ()

J'utilise Selenium RC avec le framework Junit. J'essaie de télécharger un fichier à l'aide de la méthode attachFile ().

attachFile: (Information collected from selenium API http://release.seleniumhq.org/selenium-remote-control/1.0-beta-2/doc/java/com/thoughtworks/selenium/Selenium.html#attachFile(java.lang.String,%20java.lang.String)) void attachFile(java.lang.String fieldLocator, java.lang.String fileLocator) Sets a file input (upload) field to the file listed in fileLocator Parameters: fieldLocator - an element locator fileLocator - a URL pointing to the specified file. Before the file can be set in the input field (fieldLocator), Selenium RC may need to transfer the file to the local machine before attaching the file in a web page form. This is common in selenium grid configurations where the RC server driving the browser is not the same machine that started the test. Supported Browsers: Firefox ("*chrome") only. 

Quelqu'un peut-il me dire comment définir "fileLocator" . Je ne comprends pas quelle URL être spécifiée ici. Donnez-moi un exemple si possible.

C'est une question ancienne, mais j'ai récemment résolu le problème.

  //Start an auto it script that selects the file manually if(browser.contains("iexplore")){ Runtime r= Runtime.getRuntime(); Process p = null; try { p = r.exec("C:\\uploadFile.exe \"Files\" \"ctl00$ContentPlaceHolder1$FilesView$ctl02$NewFile\" \"C:\\GhostTagBug2.ttx\""); }catch(Exception e){} p.waitFor(); } else { //Tested on firefox //Get focus and type the path manually selenium.focus("xpath=//input[contains(@id,\"_NewFile\")]"); selenium.type("xpath=//input[contains(@id,\"_NewFile\")]", "C:\\GhostTagBug2.ttx"); } 

Le navigateur n'est qu'une variable contenant le navigateur utilisé par le script Selenium et le code évidemment dans Java.

Pour IE, uploadFile.exe est un script auto it qui ressemble à ceci.

 #include IE.au3 AutoItSetOption("WinTitleMatchMode","2") ; set the select mode to select using substring ;Normally run from command line if($cmdLine[0] > 2) then $titlex = $cmdLine[1] ;Title of the window $form = $cmdLine[2] ;Name of the file upload/save form object $file = $cmdLine[3] ;Path of the file to upload Else ;Testing fields $titlex = "Files" $form = "ctl00$ContentPlaceHolder1$FilesView$ctl02$NewFile" $file = "C:\\GhostTagBug2.ttx" EndIf WinWait($titlex) ; match the window with substring $title = WinGetTitle($titlex) ; retrives whole window title WinSetState($title, "", @SW_MAXIMIZE) ;Maximize the window incase button is hidden WinActivate($title) WinWaitActive($title) $oIE = _IEAttach ("Files") $oT = _IEGetObjByName ($oIE, $form) ;Move the mouse to the button on the form and click it MouseMove (_IEPropertyGet ($oT, "screenx") + _IEPropertyGet ($oT, "width") - 10, _IEPropertyGet ($oT, "screeny") + _IEPropertyGet ($oT, "height") / 2) MouseClick ("left") ;Wait for upload screen then input the file and close it WinWait ("Choose File to Upload") $hChoose = WinGetHandle ("Choose File to Upload") ControlSetText ($hChoose, "", "Edit1", $file) ControlClick ($hChoose, "", "Button2") ;Restore window state WinSetState($title, "", @SW_RESTORE) 

Il gagne essentiellement le titre de la fenêtre, le maximise, entre le fichier à télécharger, clique sur le bouton de sélection et remonte à Selenium, je l'ai testé dans IE 8 bien, mais je ne vois pas pourquoi un IE qui est Soutenu par l'auto, c'est la bibliothèque _IE ne serait pas capable de gérer cela.

J'ai vu beaucoup de scripts de robot et de firefox hacks où vous activez javascript pour faire des choses supplémentaires. Les deux ne nécessitent aucune modification du navigateur.

Je m'excuse pour manque de commentaires, ce code est toujours en cours.

J'ai obtenu une solution pour cela, utiliser la méthode selenium.focus et les méthodes selenium.keyPressNative / keyReleaseNative.

Vous devrez vous concentrer sur la zone de texte en utilisant:

Selenium.focus ("localisateur de boîte de texte");

Ensuite, si votre fichier d'entrée est C: \ tools \ File.txt, vous devez taper les lettres comme suit:

Selenium.keyDownNative ("16"); // SHIFT ON

Selenium.keyPressNative ("67"); // c shift le rend C

Selenium.keyPressNative ("59"); //; Shift le rend: (vous ne pouvez pas faire le colon directement)

Selenium.keyUpNative ("16"); // SHIFT OFF

Selenium.keyPressNative ("47"); // slash

Selenium.keyPressNative ("84"); // t

Selenium.keyPressNative ("79"); // o

Selenium.keyPressNative ("79"); // o

Selenium.keyPressNative ("76"); // l

Selenium.keyPressNative ("83"); // s

Selenium.keyPressNative ("47"); // slash

Selenium.keyDownNative ("16"); // SHIFT ON

Selenium.keyPressNative ("70"); // f shift le rend F

Selenium.keyUpNative ("16"); // SHIFT OFF

Selenium.keyPressNative ("73"); // je

Selenium.keyPressNative ("76"); // l

Selenium.keyPressNative ("69"); // e

Selenium.keyPressNative ("46"); //.

Selenium.keyPressNative ("84"); // t

Selenium.keyPressNative ("88"); // X

Selenium.keyPressNative ("84"); // t

Selenium.keyPressNative ("10"); // Entrer

Selenium.keyReleaseNative ("10"); // Entrer

J'ai terminé la séquence avec un caractère "Entrée". Parfois, cela ne fonctionne pas, vous devrez peut-être cliquer sur le bouton (si vous connaissez le localisateur d'élément pour cela).

"FileLocator" n'est pas une URL, mais un localisateur tel que spécifié en haut dans le javadoc de la classe Selenium. C'est le localisateur de l'entrée utilisée pour sélectionner un fichier.

Le "fieldLocator" est une URL indiquant le fichier que vous souhaitez définir dans le champ de saisie du formulaire, comme spécifié dans le document que vous citez.

Avec Firefox en mode chrome (browserId = * chrome au lieu de * firefox), cela fonctionne comme prévu. Il est documenté de travailler uniquement avec ce navigateurId)

Par exemple: attachFile ("uploadField", Thread.currentThread (). GetContextClassLoader (). GetResource ("files / sample.pdf"). ToString ());

Ma solution est d'utiliser Selenium-2 en mode d'émulation RC. Cela vous permet de conserver vos tests Selenium-1 traditionnels, mais de passer à Seliium-2 api lorsque nécessaire pour effectuer des tâches comme les téléchargements de fichiers.

Selenium-2 est actuellement en version bêta mais semble relativement stable. Mais pas tout ce que Selenium-1 peut faire est pris en charge par le mode d'émulation Selenium-2 RC alors pensez deux fois avant d'aller de cette façon.

Plus d'informations ici: http://seleniumhq.org/docs/09_webdriver.html#emulating-selenium-rc

Utilisation de Selenium / Rspec / Internet Explorer Ma solution était de créer un script AutoIt sur ma machine Windows

 WinWaitActive("Choose File to Upload") Send("c:\tests\school.jpg") Send("{ENTER}") run("selectfile2.exe") 

Ensuite, exécutez-le en tant qu'administrateur sur la machine Windows. Cliquez avec le bouton droit de la souris sur le fichier exe et exécutez-le en tant qu'administrateur.

Ensuite, rspec fait une page. Cliquez "identifiant de votre bouton de navigation". Lorsque la fenêtre Parcourir s'ouvre sur la machine Windows, AutoIt remplit automatiquement la zone de texte et elle se ferme. J'espère que cela aide quelqu'un parce que cela me gênait.

Vous pouvez essayer ce script dans AutoIt. Fondamentalement, il attend la fenêtre de sélection de fichier. Ensuite, entre le chemin du fichier et envoyez enter rapidement. À la fin, vérifie s'il y avait un message d'erreur contextuelle, s'il y en a un texte et définit le code de sortie sur 1, si le code de sortie non défini est égal à 0. Le script garantit également que la fenêtre de sélection de fichier est fermée.

Le script peut être converti en exécutable (.exe) par Aut2Exe – il est important de marquer la console? Case à cocher, après que exe peut et exécuté à partir de java (Runtime.getRuntime().exec()).

Il y a aussi une chose importante à exécuter, cliquez sur le bouton de téléchargement de fichier dans un thread distinct.

 new Thread() { public voi run() { browser.click([LOCALTOR]). } }.start(); 

Sinon, le sélénium suspendra en attendant la fin de la commande de clic, ce qui ne se produit jamais car les fenêtres Sélecteur de fichiers ont été ouvertes et non fermées.

Le script:

 $title="Choose File to Upload" If($cmdLine[0] == 1 OR $cmdLine[0] == 2) Then $file=$cmdLine[1] If ($cmdLine[0] == 2) Then $title=$cmdLine[0] EndIf Else ConsoleWriteError("Wrong number of argument. Use 2 argument: [FILE PATH] [FILE UPLOAD WINDOW TITLE]. Second argument is optional") Exit(-1) EndIf If WinWaitActive($title,"",5)==0 Then ; wait 5 sec. ConsoleWriteError($title & " window wasn't opened") Exit (2) EndIf Send($file) Send("{ENTER}") $status=WinWaitActive($title, "", 1) $success = ($status = 0) If Not $success Then $text = ControlGetText($title,"","[CLASS:Static; INSTANCE:2]") WinClose($title) WinClose($title) ConsoleWriteError($text) EndIf Exit Not $success 

Il est beaucoup plus facile d'utiliser $ sel-> type et $ sel-> focus. Voici un bon article.

http://bitsilearn.blogspot.com/

J'ai simplement téléchargé des fichiers avec Selenium pour utiliser * firefox en tant que navigateur. Je suppose qu'ils n'ont pas encore mis à jour la documentation.

J'utilise le client Ruby, donc c'était quelque chose comme ça pour le faire fonctionner

 $browser.click "css=input.file" # This is the 'Choose File' button $browser.type "css=input.file", "/absolute/path/to/file.file"