2017-08-22 2 views
0

Ich habe einen Selenium WebDriver basierten Testfall, der während der Ausführung pausiert. Es sollte Tausende von Dateien auf eine Website hochladen. Wenn es die Datei zum Hochladen auswählt, klickt es manchmal nicht auf ok, sondern wartet auf manuelle Interaktion. In den meisten Fällen funktioniert es perfekt. Ich verwende StringSelection, um die Dateiquelle in das Eingabefeld zu kopieren und einzufügen.Webdriver Test Pause unerwartet

StringSelection cp = new StringSelection(fileSource); 
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(cp, null); 

Antwort

1

Ich denke, Ihr Test könnte zu schnell ausgeführt werden? Wenn dies der Fall ist, könnten Sie möglicherweise WebDriverWait verwenden? WebDriverWait kann verwendet werden, um darauf zu warten, dass das OK-Element sichtbar ist, bevor geklickt und damit fortgefahren wird.

Ich könnte falsch liegen, aber ich kann nicht wirklich sagen, was das Problem ohne den Rest des Codes ist.

persönlich verwende ich die folgende Methode, die ich dann

public void waitForElementToBeVisible(String cssSelector) throws Throwable { 
    try { 
     WebDriverWait wait = new WebDriverWait(driver, 30); 
     wait.until(ExpectedConditions.or(
       ExpectedConditions.visibilityOfElementLocated(By.cssSelector(cssSelector)) 
     )); 
    } catch (Exception e) { 
     System.out.println("Timeout exceeded"); 
     closeDriver(); 
    } 
} 
+0

Ich weiß 'WebDriverWait', aber weiß nicht, wie OK Schaltfläche in' presenceOfElementLocated() 'Methode angeben. – plaidshirt

+0

presenceOfElementLocated (By.id ("test")) hilft das? Die Antwort wurde auch für das, was ich in meinen Testfällen verwende, aktualisiert. Wenn das nicht hilft, lass es mich wissen und ich werde die Antwort löschen, anstatt dass es abgelehnt wird! – Danny

+0

Wie kann ich die OK-Schaltfläche im Dateiauswahlfenster identifizieren? – plaidshirt

1

Für Verhalten nennen kann: „Wenn es um die Datei zum Hochladen wählt manchmal nicht in Ordnung ist klicken, sondern wartet auf manuelle Interaktion. In den meisten Fällen es funktioniert perfekt. " Ich bevorzuge Verwendung fehlgeschlagene Wiederholungszählung. Jeder Schritt mit Klick sollte mit dem Test abgeschlossen werden und wenn Testergebnis = fehlgeschlagen ist - Wiederholungstest einige Male (3 oder 5). JUnit haben gute mechanizm dafür:

@RunWith(Runner.class) 
    public abstract class AbstractTest extends LibTest { 
     @Rule 
     public JUnitRetry retry = new JUnitRetry(3); 
    } 

    public class Test extends AbstractTest 
     @Test 
     public void testCp(String fileSource){ 
      StringSelection cp = new StringSelection(fileSource); 
      Toolkit.getDefaultToolkit().getSystemClipboard().setContents(cp, null); 
    } 
    } 
+0

Könnten Sie mir bitte einen genauen Anwendungsfall zeigen? – plaidshirt

+1

aktualisiert meine Antwort –

0

Unten Code funktioniert gut für die ähnliche Szenario in unserer Umgebung.

StringSelection cp = new StringSelection(fileSource); 
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(cp, null); 
Robot robot=new Robot(); 
robot.keyPress(KeyEvent.VK_ENTER); 
robot.keyRelease(KeyEvent.VK_ENTER); 

Wir können auch AutoIT verwenden, um diese Art von Aktionen durchzuführen.

Finden Sie AutoIT-Code, um diesen Fall zu behandeln.

Laden Sie AutoIT herunter, schreiben Sie diesen Code in AutoIT, benennen Sie ihn als 'Loadfromdisk' und kompilieren Sie ihn. .exe generiert, bitte exe somwhere in Ihrem lokalen Laufwerk setzen (zB: E: \ Loadfromdisk.exe)

AutoItSetOption("WinTitleMatchMode","2") ; 
$title=WinGetTitle("[CLASS:DirectUIHWND; INSTANCE:2]") 
WinActivate($title) 
WinWaitActive($title) 
If WinExists($title) Then 
    WinFlash($title,"", 4, 500) ;Just to Flash the window 
EndIf 
Sleep(1000) 
ControlSetText($title, "", "Edit1", fileSource) 
Sleep(1000) 
ControlClick($title,"","Button1") 
Exit 

Laden von Diskette Selenium Java-Code, das wird die Datei auf 'filesource' Pfad platziert laden erwähnt in AutoIT-Code in Web-Anwendung

String strAutoIT = "E:\\Loadfromdisk.exe"; 
Thread.sleep(3000); 
String[] astrArg = null; 
astrArg=new String[]{strAutoIT}; 
Runtime.getRuntime().exec(astrArg); 

Bitte sehen Sie, ob dies hilft, Ihren Testfall zu laufen.

+0

Ich benutze die exakt gleiche Lösung zu diesem Zeitpunkt. :) – plaidshirt

+0

Freut mich zu hören. es hat für dich funktioniert. – SeJaPy

+0

Es ist das Problem hier, weil ich denke, es verursacht, dass der Test manchmal aufhört. – plaidshirt

Verwandte Themen