2012-03-28 23 views
8

Sayfa yüklemesi istisnası almak istiyorum, fakat hala bunun sonucu değil. Zamanlayıcıyı istisna atmak üzere ayarlamak için örtülü olarakWait kullanıyorum.Java WebDriver Yüklenme tarihi:

WebDriver driver = new FirefoxDriver(); 
driver.manage().timeouts().implicitlyWait(1, TimeUnit.MILLISECONDS); 
driver.get("http://www.rambler.ru"); 
driver.quit(); 

Birisi lütfen önerilerinizle güncelleştirebilir misiniz? Sayfa yüklemesinin sonsuz olmayacağından emin olmak için zamana ihtiyacım var, ve yüklenecek zaman zamanlayıcıda tanımladığımden daha fazla olacaksa -> sonuç olarak istisna atar ve TC'yi (başarısız olduğu gibi) atla.

Neden sayfanın açılış öncesinde örtülü bekleme kullanan Volodymyr

cevap

17

, teşekkür ederiz? Açık beklemeye çalışın. Ramber'de bazı büyük sayfa öğelerini bulun (örneğin, arama metin kutusu). Örneğin, arama metin kutusu 5 saniye içinde görünmezse,() yöntemi, TimeoutException öğesini atar() ().

+0

Önerileriniz için teşekkür ederim, eğer yanılıyorsam düzeltin, sürücü için beklemeyi kullanmamı öneririm (http://www.rambler.ru); ancak WebDriver, driver.get() öğesi sayfa yükleme işlemini bitirene kadar bekleyecek ve öğenin beklemesine gidecektir. –

+0

webdriver her zaman sayfanın yüklenmesini bekler. Sorunu yanlış anladım olabilir. Bu durumda, get ("rambler.ru") çağrılırken sayımı başlatan zamanlayıcıyı kullanabilir ve yükleme süresi 30 saniyeden fazla olduğunda (örneğin, örnek) –

+0

: http: // stackoverflow .com/a/6107997/1165331 –

0

Pavel Zorins'in yanıtının çalışmasını, istisnaların nasıl ele alınacağını göstermediğinden katılıyorum.

Bir iFrame için nasıl beklerim.

public class IFrame1 extends LoadableComponent<IFrame1> { 

    private RemoteWebDriver driver; 

    @FindBy(id = "iFrame1TextFieldTestInputControlID") 
    public WebElement iFrame1TextFieldInput; 

    @FindBy(id = "iFrame1TextFieldTestProcessButtonID") 
    public WebElement copyButton; 

    public IFrame1(RemoteWebDriver drv) { 
     super(); 
     this.driver = drv; 
     this.driver.switchTo().defaultContent(); 
     waitTimer(1, 1000); 
     this.driver.switchTo().frame("BodyFrame1"); 
     LOGGER.info("IFrame1 constructor..."); 
    } 

    @Override 
    protected void isLoaded() throws Error {   
     LOGGER.info("IFrame1.isLoaded()..."); 
     PageFactory.initElements(driver, this); 
     try { 
      assertTrue("Page visible title is not yet available.", driver 
    .findElementByCssSelector("body form#webDriverUnitiFrame1TestFormID h1") 
        .getText().equals("iFrame1 Test")); 
     } catch (NoSuchElementException e) { 
      LOGGER.info("No such element."); 
      assertTrue("No such element.", false); 
     } 
    } 

    @Override 
    protected void load() { 
     LOGGER.info("IFrame1.load()..."); 
     Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
       .withTimeout(30, TimeUnit.SECONDS) 
       .pollingEvery(5, TimeUnit.SECONDS) 
       .ignoring(NoSuchElementException.class) 
       .ignoring(StaleElementReferenceException.class) ; 
      wait.until(ExpectedConditions.presenceOfElementLocated( 
      By.cssSelector("body form#webDriverUnitiFrame1TestFormID h1"))); 
    } 
.... 

NOT: Bu JUnit test sınıf sayfa nesnesine RemoteWebDriver örneğini geçmesi gerektirir Sen see my entire working example here can.