2015-08-08 43 views
0

我正在使用硒自動化。我編碼登錄一個頁面,它工作正常。
登錄已通過,因此新的子窗口已打開,並且父窗口已關閉。無法讀取硒中的子窗口元素作爲父窗口關閉

由於我的網絡驅動程序停止並導致異常。
異常螺紋mainorg.openqa.selenium.NoSuchWindowException

未發現窗口(警告:服務器未提供任何堆棧跟蹤信息)

請幫

+2

你能否提供一些你試圖得到這個錯誤的代碼示例? –

+2

這種情況究竟如何?在您登錄父母后關閉,彈出新窗口或父母留下? – Saifur

+0

我嘗試在IE8中登錄一個網頁, 並因此彈出一個新的窗口窗口。並登錄窗口關閉。 我的問題是webdriver返回null。所以我不能從子窗口中取消任何信息。 –

回答

1

硒保持的窗口(句柄)的列表。 webdriver需要指向正確的句柄。當一個窗口關閉時,它的句柄被刪除,你的驅動程序現在將指向一個不存在的東西。

可能,您必須顯式地切換窗口,將您的驅動程序指向右窗口句柄。也許這可以幫助:

  1. Switch between two browser windows using selenium webdriver
  2. Selenium python bindings: Moving between windows and frames

「新子窗口被打開了,結果和父窗口已關閉」

(1)下面的代碼向您展示如何檢索窗口句柄列表,並根據其標題檢索正確的句柄。

private void handleMultipleWindows(String windowTitle) { 
     Set<String> windows = driver.getWindowHandles(); 

     for (String window : windows) { 
      driver.switchTo().window(window); 
      if (driver.getTitle().contains(windowTitle)) { 
       return; 
      } 
     } 
    } 

您可以使用該功能(或類似的東西)來檢索新窗口。從您提供的代碼,這將給:

// Entering the credentials in the login window. 
driver.findElement(By.id(txtUserId)).clear(); 
driver.findElement(By.id(txtUserId)).sendKeys(poovan); 
driver.findElement(By.id(txtPassword)).clear(); 
driver.findElement(By.id(txtPassword)).sendKeys(welcome1); 
driver.findElement(By.id(btnSubmit)).click(); 
// Here the login window gets closed, handler to that window disappears, and driver becomes stale. 
// So we need update the driver to point to the new window 
handleMultipleWindows("The title of my new window"); 
driver.findElement(By.name(bono)).sendKeys(080); 
+0

感謝您的建議。我無法切換窗口。 線程「main」中的異常org.openqa.selenium.NoSuchWindowException:無法在關閉的窗口中找到元素(警告:服務器沒有提供任何堆棧跟蹤信息) 命令持續時間或超時:10毫秒 –

+0

您可以給我們什麼代碼你曾經嘗試和切換窗口。更新了回覆。有一個鏈接到python文檔(這不是java,但我找到了更清晰的說明,SeleniumHQ的文檔上有什麼, –

+0

'driver.get();' –

0

請使用下面的代碼。它肯定會起作用。

String parentWindow = driver.getWindowHandle(); 
     Set<String> handles2 = driver.getWindowHandles(); 
     for (String windowHandle : handles2) { 
      if (!windowHandle.equals(parentWindow)) { 
       driver.switchTo().window(windowHandle); 
      } 
     } 
+0

謝謝,但我的問題仍然存在 –