2016-09-09 3 views
0

Ich stehe mit Selenium WebDriver vor einem sehr seltsamen Problem. Nach dem Einloggen in die Website zeigt unsere Anwendung ein Popup-Fenster für die Standardauthentifizierung, das ich über AutoIT bearbeitet habe. Problem ist nach dem Laden der Seite, Selen dauert etwa 80-100 Sekunden, um den nächsten Befehl auszuführen. Next Command könnte alles sein, ich versuche einfach den Titel des Browsers nach dem Laden der Seite zu erhalten. Nach dem Ausführen des nächsten Befehls in 80-100 Sekunden führt Selenium den Rest des Befehls in normaler Geschwindigkeit aus.Selenium braucht zu viel Zeit, um einen Befehl auszuführen, nachdem das Browser-Authentifizierungsfenster geöffnet wurde

Jede Idee, was könnte das Problem sein? Ich habe meinen Code unten hinzugefügt.

  driver.findElement(By.id("username").sendKeys("username"); 
      driver.findElement(By.id("password").sendKeys("passowrd"); 
      driver.findElement(By.id("submit").click(); 


      File file = new File("lib", "jacob-1.17-x64.dll"); 
      System.setProperty(LibraryLoader.JACOB_DLL_PATH, 
        file.getAbsolutePath()); 
      AutoItX autoIt = new AutoItX(); 
      Thread.sleep(2000); 

      String title = "Authentication Required"; 


      autoIt.winActivate(title, ""); 
      autoIt.winWaitActive(title); 
      if (autoIt.winExists(title)) { 
       autoIt.send("username{TAB}", false); 
       autoIt.send("password{Enter}", false); 
      } 

     } catch (InterruptedException ex) { 
      // 
     }*/ 

     System.out.println(driver.getTitle());  


     System.out.println(driver.findElement(By.cssSelector(".sdfsdf")).getText()); 
     System.out.println(driver.findElement(By.id("key")).getAttribute("placeholder")); 

In dem obigen Code, nimmt Selen etwa 60-80 Sekunden den get Titel Befehl auszuführen, aber nach, dass es funktioniert ziemlich normal. Auch wenn ich die Reihenfolge des Befehls im Code ändere, bleibt das Ergebnis gleich.

+0

Verwenden Sie die neueste Selenium-Chrom-Treiberversion? Es könnte veraltet sein. Was passiert nach diesen 60-80 Sekunden, wird die Seite möglicherweise aktualisiert? Es kann auch sein, dass beim Aufruf von 'driver.getTitle()' die Seite noch nicht geladen ist. Sie sollten etwas "warten" Bedingung oder etwas hinzufügen. – Edgar

+0

Ich benutze Firefox Browser und nein, es wartet 60-80 Sekunden, nachdem die Seite bereits geladen ist. – Naseem

Antwort

0

@Naseem: Wie Sie sagen, Seite ist bereits geladen.? Aus dem Code, den Sie zur Verfügung gestellt, ist es keine Bedingung, die bis Seite geladen

Anyways zu warten, sagt, wenn Sie nicht warten, bis document.readyState abgeschlossen ist, schlage ich vor, Sie den Code unten verwenden und geben versuchen

void waitForLoad(WebDriver driver) { 
    ExpectedCondition<Boolean> pageLoadCondition = new 
     ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver driver) { 
       return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete"); 
      } 
     }; 
    WebDriverWait wait = new WebDriverWait(driver, 30); 
    wait.until(pageLoadCondition); 
} 

vermeiden Sie auch bitte mit Thread.sleep()

Wenn der obige Code nicht dann muss AutoIT Code hilft die Ursache sein, btw, während AutoIT verwenden, was ist die "Local Const $ timeout" Sie sind verwenden.

Aus dem folgenden Blog, einen solchen AutoIT-Code zur Verfügung gestellt.

http://seleniummonk.blogspot.in/p/handle-upload-dialog.html

den Code aus es versuchen. Setzen Sie Ihre Beobachtungen hier, sehen Sie, wenn es nicht Ihren Bedürfnissen entspricht

+0

Mit der obigen Funktion wartet Skript auf wait.until (pageLoadCondition); Linie für 80-100 Sekunden. Ich habe auch den Auto-IT-Code entfernt, aber es funktioniert genauso. Ich habe versucht, die Seitenzeit auch mit dem folgenden Befehl zu ändern, aber es hat keine Ausnahme nach 10 Sekunden ausgelöst. driver.manage(). Timeouts(). PageLoadTimeout (10, TimeUnit.SECONDS); – Naseem

+0

versuchen Sie Folgendes, mit implict warten. driver.manage(). Timeouts(). ImplicitlyWait (10, TimeUnit.SECONDS); – FayazMd

+0

BTW., Verwenden Sie Chrom.? Soweit ich mich erinnere, ist pageLoadTimeout() nicht für Chrome implementiert, (nicht sicher in den letzten Builds) – FayazMd

Verwandte Themen