Ich schreibe einen Selenium-Testfall, bei dem einer der Schritte darin besteht, eine Datei über Dropzone.js hochzuladen.Programmgesteuertes Hochladen/Hinzufügen von Dateien über Dropzone z. von Selenium
(A Selen Javascript im Browser ausführen kann, also wenn es programmatisch in Javascript getan werden kann, das auch in Ordnung sein würde.)
Ich will ging der ganzen Weg zu vermeiden, dass die Datei-Browser-Fenster zu simulieren öffnen, Datei usw. auswählen, da dies außerhalb dessen liegt, was der Webtreiber handhaben kann und sehr kompliziert wird. In Pseudo-Code, würde Ich mag so etwas tun:
1. Select some Dropzone element 2. Set file path 3. Submit (upload the file)
Es gibt einen wahrscheinlich Ansatz in einer bestehenden Frage erwähnt (Unable to upload file using python selenium webdriver on http://www.dropzonejs.com), die das "dz-hidden-Eingang" Element verwendet (a DOM-Dateieingabe).
Leider funktioniert es nicht (zumindest nicht in der aktuellen Version von Dropzone) - nach dem Setzen der Datei auf das Element ist die Dropzone .files noch leer und es findet kein Upload statt.
Nachdem er in der Dropzone Quelle suchte, kam ich die oben durch die Erweiterung mit einer Arbeits Lösung:
1. Set file path in the "dz-hidden-input" element 2. Use javascript to retrieve the File object from the element 3. Pass the file to dropzone.addFile(file)
Aber meine Sorge ist es wirklich ein Hack ist, sowohl als versteckter Eingang und. addFile ist nicht dokumentiert, und der Test wird in der Zukunft unterbrochen, wenn Dropzone die Implementierung usw. ändert.
Gibt es einen besseren/dokumentierten Weg, dies zu tun?
(Um zu klären - Ich versuche, eine neue Datei zu, nicht eine vorhandene Datei zu zeigen, wie sie in der Dropzone FAQ erwähnt)
Wir sind durch serverseitige Soap-Anfrage und als UI-Automatisierung durch Selen, für z.B. Klicken Sie auf Eingabe-Schaltfläche -> Verwenden Sie Web-Treiber-Zwischenablage/Java-Roboter -> Einfügen/geben Sie den Speicherort der Datei + Dateiname> Hit Roboter eingeben. Es tut mir leid, aber ich habe keine Idee von Dropzone Js Idee, aber das sind die zwei Möglichkeiten, die andere als die, die Sie durch Javascript-Level laden wollen programmatisch. –
Danke, ja, ich habe es auch funktioniert, indem ich den Java Robot benutzt habe, um GUI-Aktionen zu simulieren, wie du erwähnt hast (obwohl ich es vorgezogen hätte, diese Route nicht zu benutzen, wenn es möglich ist ...). Als Referenz habe ich einen Beispielcode in diesem gefunden: http://sqa.stackexchange.com/questions/12851/how-can-i-work-with-file-uploads-during-a-webdriver-test, aber dafür Um zu arbeiten, musste ich einige Thread.sleep zwischen Aktionen einfügen. (Auch wenn Dropzone kein reguläres Dateieingabeelement ist, ist es möglich, nach ID zu suchen und dann auf click zu klicken, wodurch das Dateibrowserfenster geöffnet wird). –
Ja, Sie müssen ausreichend hinzufügen nein. Da das mit dem Dateiexplorer interagiert und einige Zeit für das Öffnen und nach dem Hochladen benötigt, benötigt es die erforderlichen Schlafvorgänge entsprechend der Dateigröße. Hinzufügen als Antwort ... –