2013-01-25 9 views
5

Użyłem selenu wspieranego przez webdriver, aby poczekać na załadowanie konkretnej ramki. ponieważ w niektórych przypadkach przejście do konkretnej ramki nie powiedzie się, ponieważ ramka nie została załadowana. Kod używam jestJak mogę poczekać na załadowanie konkretnej ramki? Używam selenu webdriver 2.24

selenium.waitForFrameToLoad(frameJCLeft, strTimeOut); 
driver.switchTo().defaultContent(); 
driver.switchTo().frame(frameJCLeft); 

Proszę dać mi znać, jeśli istnieje sposób, jak mam zamiar wyeliminować selenu kopii webdriver i używać tylko API webdriver

Odpowiedz

20

Do tego celu można użyć oczekiwania sterownika sieci Web i oczekiwanej klasy warunku.

Spróbuj tego kodu.

WebDriverWait wait = new WebDriverWait(driver,10); 
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameName); 

Powyższy kod będzie czekał na given frame up to 10 seconds. Jeśli ramka jest dostępna, przełącza się na daną ramkę. W przeciwnym razie, rzuca TimeoutException.

Limit czasu zależy od zastosowania i życzenia użytkownika.

Aby uzyskać więcej informacji http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#frameToBeAvailableAndSwitchToIt(java.lang.String)

+0

Dzięki @Manigandan, twoje rozwiązanie działa dobrze –

+0

Proszę, zrób to jako odpowiedź. – Manigandan

+0

dzięki! pracował jak urok dla mnie! –

0

chciałbym przełączyć się za pomocą selen 2, a użyj RemoteWebDriver zamiast "WebDriver wspieranego selenu 1.0". Potem bawiłbym się z WebDriver.TargetLocator.

+0

jak wspomniałem „Mam zamiar wyeliminować selenu kopii webdriver i używać tylko API webdriver” dokładnie to, co robię, ale ja cudnt znaleźć właściwą oczekiwany stan oczekiwania, tak czy inaczej dzięki za kolega z odpowiedzi. –

+0

Czy próbowałeś już stworzyć własną metodę onFrameLoad(), która blokuje i czeka na tytuł strony lub jakiś inny oczekiwany obiekt w ramce? Z czymś podobnym można go ponownie użyć po przejściu na lokalny RemoteWebDriver. – djangofan

Powiązane problemy