2011-11-08 67 views
0

如何點擊按鈕,等待模糊事件,然後獲取網站的源代碼?如何使用Selenium 2使用事件

我知道我可以使用getPagesource()方法,但我只想在jquery加載圖像顯示後執行此操作。

回答

1

如果模糊事件導致可見效果,則可等待該效果,如等待顯示圖像。否則,如果沒有來自該事件的可見效果,則需要一個「測試掛鉤」來告訴測試與該事件相關的功能已經運行,例如將javascript變量設置爲已知值可以在測試中查詢。

對於這兩種情況下,你可以使用一個明確的等待條件,如文檔中所示的情況:

http://seleniumhq.org/docs/04_webdriver_advanced.html#explicit-and-implicit-waits

編輯:

關於你的評論,Nyegaard,你可以使用一個像這樣的明確的等待:

WebDriver driver = new FirefoxDriver(); 
    driver.get("http://somedomain/url_that_delays_loading"); 
    Boolean expectedTextAppeared = 
     (new WebDriverWait(driver, 10)) 
      .until(ExpectedConditions.textToBePresentInElement(
       By.id("ctl00_content_createnewschema_modalAlert_alertMessage"), "textYoureExpecting")); 

此代碼將等待「textYoureExpecting」出現在跨度超時o f 10秒。如果需要更多時間才能顯示,則只需調整超時時間。

+0

嗯,我得到了一個,將得到的JavaScript彈出之後的值,它會得到通風口之後。但是當我看到AJAX添加的值時,我看不到它的價值 – Nyegaard

0

對於網頁中的所有AJAX請求,我使用jQuery.Active標誌來確定頁面是否已加載。如果jQuery.Active非零,這意味着這些是瀏覽器正在處理的活動請求的數量。當它歸結爲零時,這意味着活動請求的數量是沒有的。我沒有使用這個標誌模糊事件,但你不妨嘗試一下。你應該明確地使用暗示,明確地等待Luiz建議的。這是一個等待5分鐘以完成活動請求的功能。也許你可以說參數,加試,抓等

public int waitforAJAXRequestsToComplete(){ 
     long start = System.currentTimeMillis(); 
     long duration; 
     boolean ajaxNotReady = true; 
     while(ajaxNotReady){ 
      if(((JavascriptExecutor)driver).executeScript("return jQuery.active").toString().equals("0")) 
        return 0; 
       duration = System.currentTimeMillis() - start; 
       duration = (long) (duration/(60*1000F)); 
       if(duration>5.0) 
        return 1; 
      } 
       return 1; 
    }