2013-08-28 18 views
9

Testuję stronę z ramką iFrame, której zawartość jest dynamicznie generowana przez JavaScript. Muszę poczekać na załadowanie iFrame, aby upewnić się, że wszystkie elementy są obecne. Próbowałem poniższy kod, to nie działa.Selenium WebDriver: Jak czekać na załadowanie iFrames?

WebDriver frame = wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frmMain")); 

Próbowałem również czekać na obecność elementu w iFrame. To też nie zadziałało.
Każda pomoc będzie bardzo ceniona, dzięki!

Odpowiedz

-3

Być może po prostu trzeba dodać oświadczenie oczekiwania - dla pewnej liczby sekund ...

+0

Dzięki za odpowiedź. Pomocnym jest, aby poczekać na sekundę serwralną przed rozpoczęciem pracy z ramką iframe. – user2432405

+0

Aplikacja, którą testuję, ma ramki iframe na każdej stronie. Czas potrzebny na zakończenie ładowania iframe zależy od danych, które należy przetworzyć. nie wydaje się eleganckim sposobem czekania na określone sekundy za każdym razem, gdy strona się odświeża. – user2432405

+0

Zgadzam się, że to nie jest eleganckie, ale okazało się, że czasami muszę to robić. –

8

Wybierz dowolny element na IFrame, który trwa maksymalny czas ładowania np dowolny przycisk lub obraz i czekać za pomocą następującego kodu.

WebDriverWait wait = new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.visibilityOfElementLocated((By 
       .name("element")))); 

Zamiast tego możesz poczekać, aż pojawi się iFrame, a następnie przejść do niego i użyć powyższej instrukcji!

+1

Zrobiłem to wcześniej z załadowanym przez JS Iframe i działa. – craastad

+0

Przetestowałem stronę z następującym kodem: \t pustka publiczna SelectSomething (sterownik WebDriver, String s) { driver.manage(). Timeouts(). ImplicitlyWait (10, TimeUnit.SECONDS); WebDriverWait wait = new WebDriverWait (sterownik, 20); WebDriver frame = wait.until ( \t \t ExpectedConditions.frameToBeAvailableAndSwitchToIt ("frmMain")); wait = new WebDriverWait (frame, 30); System.out.println ("##################" + (nowa data())); System.out.println (frame.getPageSource()); System.out.println ("##################" + (nowa data())); ////// Należy kontynuować ... – user2432405

+0

wypróbuj { \t \t wait.until (ExpectedConditions.presenceOfElementLocated (By.tagName ("img"))); \t} catch (TimeoutException e) { \t \t System.out.println (frame.getPageSource()); \t} \t \t System.out.println ("##################" + (nowa data())); \t System.out.println (frame.getPageSource()); \t System.out.println ("##################" + (nowa data())); } ////// Należy kontynuować ... – user2432405

Powiązane problemy