2016-11-22 1 views
0

Ich benutze Selen (Java), um eine Webanwendung zu automatisieren, die Youtube wie Fortschrittsbalken verwendet, der Ladevorgang der Seite oben auf der Webseite anzeigt. Ich muss eine Wartefunktion schreiben, die warten würde, bis dieser Fortschrittsbalken vollständige und Seitenladevorgänge erreicht. Diese Fortschrittsbalken haben keine eigene ID. Wie kann ich eine Wartezeit bis zum Laden des Fortschrittsbalkens programmieren?Wie Selen zu automatisieren warte auf Youtube wie progess Bars

Antwort

1

Die youtube Fortschrittsbalken hat die folgenden Details beim Laden -

<div id="progress" class="waiting" style="transition-duration: 900ms; width: 60%;"><dt></dt><dd></dd></div> 

Da das Laden der Breite Attributwert steigt auf 100% fortsetzt. Dann wird dieser Fortschrittsbalken aus dem DOM entfernt (gut, ich konnte es nicht im Inspektionsbereich finden). Versuchen Sie, die Netzwerkgeschwindigkeit von den Chrome-Entwicklertools auf Minimum zu beschränken, um dies im DOM zu sehen.

Sie können eine explizite Wartezeit für dieses Fortschrittsdiv-Breitenattribut einrichten (würde eine benutzerdefinierte Wartezeit erfordern) oder Unsichtbarkeit oder Anwesenheit. Abhängig von der Sprache verwenden Sie Automatisierung. Oder sogar eine benutzerdefinierte Wartezeit mit javascriptxecutor, um jquery auszuführen, um nach diesem Element zu suchen.

0

Hier sind einige Methoden, die ich häufig verwende, um festzustellen, ob ein Element sichtbar ist. Sorry diese sind in C# nicht Java aber sollte ziemlich nah sein.

public void WaitForElementVisibile(IWebDriver driver, By selector) 
    { 
     var attempts = 0; 
     while (attempts < 2) 
     { 
      try 
      { 
       WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(90)); 
       wait.PollingInterval = TimeSpan.FromMilliseconds(300); 
       wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(selector)); 
       break; 
      } 
      catch (WebDriverException) 
      { 
       attempts++; 
      } 
     } 
     if (attempts >= 2) 
     { 
      TakeScreenshot(driver); 
      log.Error("Failed to located element " + selector.ToString() + " for " + Capabilities.BrowserName); 
      throw new NoSuchElementException("Cannot locate " + selector.ToString() + " for " + Capabilities.BrowserName); 
     } 
    } 

Wenn Sie VisibilityOFAllElementsLocatedBy() zu InvisibilityOfElementLocated() ersetzen Sie die Nachricht ändern, zu warten, bis ein Element nicht sichtbar ist.

Wenn Sie an der TakeScreenshot() Methode interessiert sind, kann ich das auch zur Verfügung stellen.

Aber hoffentlich mit etwas wie der obigen Methode können Sie auf ein Element warten, das nach dem Laden angezeigt wird abgeschlossen ist. Vielleicht gibt es einen Text mit der Aufschrift "Loading complete" oder so.

Ich könnte weitere Hilfe bieten, wenn Sie eine URL angeben, damit ich die Seite sehen kann. Hoffe das hilft.

Verwandte Themen