2012-03-28 12 views
8

लोड करने के लिए पृष्ठ की प्रतीक्षा करें, मैं पेज लोड का अपवाद प्राप्त करना चाहता हूं, लेकिन अभी भी इसके परिणाम नहीं हैं। मैं अपवाद को फेंकने के लिए टाइमर सेट करने के लिए implicitlyWait का उपयोग करता हूं।जावा वेबड्राइवर

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

क्या कोई मुझे सुझावों के साथ अपडेट कर सकता है? मुझे यह सुनिश्चित करने के लिए यह चाहिए कि पेज लोड अनंत नहीं होगा, और यदि लोड करने का समय टाइमर में परिभाषित किया गया है -> परिणाम के रूप में अपवाद फेंक दें और टीसी (असफल के रूप में) छोड़ दें।

क्यों आप पृष्ठ के उद्घाटन से पहले निहित इंतजार उपयोग कर रहे हैं वलोडिमिर

उत्तर

17

धन्यवाद,? स्पष्ट प्रतीक्षा का उपयोग करने का प्रयास करें। रैम्बर पर कुछ प्रमुख पृष्ठ तत्व खोजें (उदाहरण के लिए, खोज टेक्स्टबॉक्स)। उदाहरण के लिए:

WebDriverWait wait = new WebDriverWait(webDriver, 5); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("xpath_to_search_textbox"))); 

तक() विधि टाइमआउट अपवाद को फेंक देगा यदि खोज टेक्स्ट बॉक्स 5 सेकंड के भीतर नहीं दिखाई देगा।

+0

आपके सुझाव के लिए धन्यवाद, अगर मैं गलत हूं, तो मुझे सही करें, आप मुझे driver.get ("http://www.rambler.ru") के बाद तत्व के लिए प्रतीक्षा का उपयोग करने का सुझाव देते हैं; लेकिन WebDriver तब तक इंतजार करेगा जब तक driver.get() पेज लोडिंग खत्म नहीं करेगा और तत्व प्रतीक्षा के लिए जाएगा? –

+0

वेबड्राइवर हमेशा पृष्ठ लोड करने की प्रतीक्षा करता है। हो सकता है कि मुझे आपके प्रश्न की गलत समझ हो। इस मामले में आप टाइमर का उपयोग कर सकते हैं जो गिनती शुरू करेगा जब आप ("rambler.ru") प्राप्त करते हैं और लोडआउट समय 30 सेकंड से अधिक होने पर टाइमआउट अपवाद को फेंक देते हैं (उदाहरण के लिए) –

+0

मेरा मतलब है कि: http: // stackoverflow .com/a/6107997/1165331 –

0

मैं इस बात से सहमत नहीं हूं कि पावेल ज़ोरिन्स का जवाब काम करेगा क्योंकि वह यह नहीं दिखाता कि अपवादों को कैसे संभाला जाए।

यहां मैं आईफ्रेम के लिए प्रतीक्षा कैसे करता हूं। यह जरूरी है कि अपने JUnit परीक्षण वर्ग पेज वस्तु में RemoteWebDriver के कहने पारित:

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"))); 
    } 
.... 

ध्यान दें: आप see my entire working example here कर सकते हैं।

संबंधित मुद्दे