2014-03-06 39 views
0

我正在與硒webdriver 2.39的Java工作,我們有應用程序多個'處理'彈出窗口顯示2-5秒,並自動關閉,這是取決於數據。現在,問題是如何處理這個彈出窗口,這個彈出窗口是jQuery彈出窗口。一旦所有這三個彈出窗口都打開並處理數據並自動關閉,我的腳本只能繼續工作。但是,我不能使用等待時間,因爲此腳本用於使用JMeter進行負載測試,因此處理時間可能需要多於或少於5秒。是否有任何方法可以知道彈出窗口是否存在?我在下面給出的示例代碼中使用過,但它只返回父窗口,並且它不能識別jQuery彈出窗口,使用下面給出的代碼我可以得到如果popup存在或不存在,但僅當它不是jQuery彈出窗口。誰能幫我?如何處理多個jQuery彈出與硒webdriver

public void FocusOnWindow() throws Exception{ 

    int i=0; 

    do { 
     handles=driver.getWindowHandles();//get all windows 
     iterator = handles.iterator(); 
     if(iterator.hasNext()){ 
      subWindowHandler = iterator.next(); 
      if(subWindowHandler==null){ 
       i=0; 
      }else if(subWindowHandler!=null){ 
       if(subWindowHandler!=parentWindowHandler){ 
        popup = true; 
        i=2; 
       } 
      } 
     } 
    }while(i<2); 
    if(popup){ 
     do{ 
      handles=driver.getWindowHandles(); 
      iterator = handles.iterator(); 
      Thread.sleep(500); 
      if(iterator.hasNext()){ 
       subWindowHandler = iterator.next(); 
       if(subWindowHandler!=parentWindowHandler){ 
        if(subWindowHandler==null){ 
         String source = driver.getPageSource(); 
         if(source==null){ 
          i=2; 
         } 
        } 
       }else { 
        i=0; 
       } 
       //System.out.println("No any other popup."); 
      } 

     }while (i<2); 
    } 
} 
+0

你能否提供你正在試圖控制網頁的網址是什麼? –

+0

@Barak Manos:好吧,我使用我的公司應用程序,因此無法爲您提供此類詳細信息,但是您可以參考'http://salman-w.googlecode.com/svn/trunk/jquery-ui-dialog/modal -dialog-with-buttons.html'鏈接區別是在彈出窗口中顯示只顯示處理'圖標與消息處理...' –

+0

另外,你可以參考這個鏈接http://malsup.com/jquery/block/#頁面,還有什麼方法可以確定屏幕是否阻止或不在此鏈接中給出? –

回答

0
public boolean runScript(){ 
     JavascriptExecutor js = (JavascriptExecutor) driver; 
     return (Boolean) js.executeScript("return jQuery.active==0;"); 
     } 


    public void FocusOnWindow() throws Exception{ 
     int i=0; 
     do { 
      if(!runScript()){ 
       System.out.println("Popup exists"); 
       i++; 
      }else{ 
       i=5000; 
       System.out.println("Popup does not exists"); 
      } 
     }while(i<5000); 
    } 
1

首先,我強烈建議不要再等等了。

如果您知道任何這是唯一和後處理的一部分彈出屏幕元素(即導致用戶的屏幕),然後利用硒waitForElement() API函數,可以智能化等元素出現,一旦出現就會進一步採取行動

看看this鏈接,它解釋了使用它的優點。

而且與Java綁定到位硒,您可以使用這樣的事情 -

WebDriverWait wait = new WebDriverWait(driver, /*seconds=*/3); 
elementOfPage = wait.until(presenceOfElementLocated(By.id("id_of_element"))); 

Function<WebDriver, WebElement> presenceOfElementLocated(final By locator) { 
return new Function<WebDriver, WebElement>() { 
    public WebElement apply(WebDriver driver) { 
     return driver.findElement(locator); 
    } 
}; 
} 
+0

感謝您的評論和鏈接,你附加。然而,在等待幾個小時之後,我發現下面給出的代碼與我的應用程序完美協同工作,該應用程序動態處理每個jQuery彈出窗口我真的很感謝你的附加鏈接,這給了我另一種處理這個問題的方法。 –

+0

不用客氣。 – Vabz

相關問題