2012-04-12 7 views
0

Ich verwende eine Datei-Upload-Aufgabe mit Selenium.Stoppen Sie den Selen-Server, bis die Datei hochgeladen wurde.

Das Problem hier ist, Datei hochladen, es dauert 5-10 Sekunden Zeit. Aber ich muss den Selenium-Server stoppen, bis er vollständig hochgeladen ist.

Hier ist ein Beispielcode.

selenium.type("id=Fileuploader","c:\\mypic.jpg"); 
selenium.click("id=submmit"); 

Es gibt Fehler, weil die selenium.click Anweisung direkt nach der selenium.type Anweisung ausführen, ohne auf die Datei wartet voll zu laden.

Also, was soll ich hier verwenden, um den Selenium-Server zu stoppen (Server muss irgendwann warten)?

Antwort

1

Asynchrone Anfragen sind immer schwer zu verfolgen. Wenn die Datei hochgeladen wird, muss die Seite geändert werden. Suchen Sie danach, warten Sie darauf.

Sie können versuchen waitForCondition().

Oder irgendeine Art von isElementPresent() Magie

final int TIMEOUT = 10000; // ten seconds 
long targetTime = System.currentTimeInMillis() + TIMEOUT; 
while((System.currentTimeInMillis() < targetTime)) { 
    if (selenium.isElementPresent("xpath=something")) { 
     break; 
    } 
} 

EDIT: Wenn es gibt kein neues Element, es hat zumindest eine Art von Veränderung sein. Zum Beispiel, wenn Ihre asynchronen Hochladen ein value von einem verborgenen input Elemente ändern, könnten Sie testen es mit getValue(), oder vielleicht auch nur einen Smart-Locator:

isElementPresent("xpath=//input[@type='hidden' and contains(@value,'mypic.jpg')]"); 

EDIT2: Wenn das Element, für das wir prüfen (In diesem Fall ist die Bildervorschau schon vor dem Upload vorhanden, dann war es einfach nicht sichtbar und wir können das durch isVisible()

+0

habe ich mit 'selen.iselementpresent' versucht.Aber es gibt kein neues Element, das nach dem Upload erfolgreich hochgeladen wird. –

+0

Ich habe noch die Lösung für die gestrige Frage. –

+0

Oh, das ist eine Schande. Ich denke immer noch, dass es ein anderes unentdecktes Element oder Skript geben muss, da Sie nicht auf 'Elemente in Ihrem Browser klicken können. –

1

Im schlimmsten Fall können Sie immer einige Thread.sleep() im Code verwenden. Aber der beste Weg ist zu sehen, die advanced usage - explicit and implicit waiting

+0

Was ist nicht für gutes altes Selen, fürchte ich. Sie müssten entweder zu 'WebDriver' wechseln oder zumindest versuchen, [' SeleniumBackedWebDriver'] zu verwenden (http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverBackedSelenium .html). –

+0

ist es sicher in allen Fällen thread.sleep zu verwenden? bedeutet, dass immer dann, wenn auf ein Element gewartet werden muss/sichtbar ist, eine for/while-Schleife verwendet wird. Kann ich diese Schleifen nun durch thread.sleep (etwas Zeit) ersetzen? –

+1

Deshalb beginnt meine Antwort "Wenn am schlimmsten" ... Nein, es ist nicht immer sicher. Aber es bedeutet auch nicht, dass du es nie benutzen solltest;) –

0

testen. Nach dem Hochladen der Datei erscheint ein neues Element, das die Vorschau des hochgeladenen Elements anzeigt.

So verwendete ich

selenium.isVisible("xpath of new preview element") 

es in Schleife Put. Es wird klappen.

Vielen Dank.

Verwandte Themen