2012-08-16 69 views
1

我使用InternetExplorerDriver(和我必須)。我有兩個窗口句柄。我必須在這些窗口之間切換多次。 我這樣做使用這兩行。硒Webdriver窗口切換失敗隨機

driver.switchTo().window(myWindowHandle1); 
driver.findElement(By.xpath("//body")).click(); 

我說身體上的點擊,否則有時交換機工作不正常,精細,自從這爲我工作。

現在我有一個新問題。 我的第三個窗口開關(1. window1 - > window2; 2. window2 - > window1; 3. window1 - > window2;)不再工作。

ElementNotVisibleException: Cannot click on element --- in this case, line 2 

因此身體不再可見。 上一個窗口開關完美工作,所以手柄是正確的。 查找正文元素By.tagName並未解決問題。 任何人都有同樣的問題?解決方案?

+1

你的xpath看起來非常抽象..偶爾你的切換失敗有兩個原因。 *超時*和隱藏的元素。例如,如果你的這個元素的html代碼是你可以點擊這個元素:'driver .findElement(「xpath = // input [contains(@id,'login')]」))。click();' – 2012-08-16 09:14:49

+0

首先,謝謝,它工作。但仍然,爲什麼不點擊身體工作?它適用於所有其他窗口開關。整個過程中身體是可見的不是嗎?並且增加超時也沒有幫助。 – Robinho 2012-08-16 10:40:39

+1

點擊body元素不是一個好方法。記錄.click()方法以嘗試單擊元素的中心。如果元素的中心在視口中不可見,並且無法滾動到視圖中,則至少在IE驅動程序中,您可能會看到異常。 – JimEvans 2012-08-16 11:26:40

回答

0

我終於找到我用下面的方法來切換到新窗口答案, ,

public String switchwindow(String object, String data){ 
     try { 

     String winHandleBefore = driver.getWindowHandle(); 

     for(String winHandle : driver.getWindowHandles()){ 
      driver.switchTo().window(winHandle); 
     } 
     }catch(Exception e){ 
     return Constants.KEYWORD_FAIL+ "Unable to Switch Window" + e.getMessage(); 
     } 
     return Constants.KEYWORD_PASS; 
     } 

要移動到父窗口,我用

在此先感謝

問候下面的代碼,

public String switchwindowback(String object, String data){ 
      try { 
       String winHandleBefore = driver.getWindowHandle(); 
       driver.close(); 
       //Switch back to original browser (first window) 
       driver.switchTo().window(winHandleBefore); 
       //continue with original browser (first window) 
      }catch(Exception e){ 
      return Constants.KEYWORD_FAIL+ "Unable to Switch to main window" + e.getMessage(); 
      } 
      return Constants.KEYWORD_PASS; 
      } 

使用此代碼在窗口之間切換。