2017-08-14 98 views
3

我目前通過Jenkins使用「Build Periodically」選項運行多個Java程序,並使用H 06 * * 1-5(週一至週五上午6點至上午7點之間每天運行它) 。在Selenium/Java中殺死chromedriver進程

在某些程序中,我點擊鏈接打開一個新窗口。因此,我用下面的代碼

driver.findElement(By.xpath(".//*[@id='terms']/li[1]/a")).click(); 
System.out.println("Home Page is loaded Successfully and Terms of Use Link is clicked"); 
ArrayList<String> window1 = new ArrayList<String>(driver.getWindowHandles()); 
driver.switchTo().window(window1.get(1)); 
Thread.sleep(3000); 
driver.close(); 
Thread.sleep(3000); 
driver.switchTo().window(window1.get(0)); 

現在程序運行後,我的下面這個其他程序失敗,因爲已經在運行的過程ChromeDriver.exe的。

我在上面的代碼中嘗試使用driver.quit()而不是driver.close(),但它會關閉我的整個瀏覽器。

注意:我在我的程序結束時使用了driver.quit(),它無法幫助我擺脫當我切換窗口時打開的正在運行的Chromedriver.exe實例。

請給我一個處理這個問題的好方法。我一直在用JAVA尋找這個解決方案。但主要是我看到了C#的答案。

感謝

+0

您能否總結一下你正在嘗試自動化您確切的手動步驟?如果你正在用'driver.close();'關閉瀏覽器''driver.switchTo()。window(window1.get(0));''。請關閉窗口手柄。 – DebanjanB

+0

嗨,我從我的主頁點擊「使用條款」鏈接。這打開了一個新窗口。所以我切換到新打開的窗口來檢查該窗口中的靜態文本。一旦完成。我關閉該窗口並切換回原來的主頁窗口。因此,當我使用driver.close()時,新打開的窗口關閉,但chromedriver.exe實例保持不變。這會在我的下一個預定程序運行時產生問題。 – johnsonambrose

+0

如此接近將關閉當前活動的窗口,相當會殺死chromedriver。當你編程完成,這就是爲什麼你需要使用quit來關閉Chrome和驅動程序 –

回答

0

不要將特定網頁上使用driver.close(),讓它成爲和司機工廠使用下面的代碼:

//This closes the browser after each test class 

@AfterClass 
public void tearDown() 
{ 
    driver.quit(); 
} 

它應該幫助。

+0

我嘗試使用driver.quit而不是driver.close()。但是,問題在於它關閉了程序打開的所有內容,並停止執行下面的所有代碼。 如果我不得不去1.使用條款2.隱私權政策3.從主頁版權信息。當我點擊使用條款鏈接並打開一個新窗口時,當我使用driver.quit()而不是driver.close()時,我的原始主頁屏幕也被關閉,程序將在那裏停止執行。我需要繼續執行,必須點擊「隱私政策」和「版權信息」頁面 – johnsonambrose

0

根本原因可能在其他地方。這些問題通常發生在拋出意外異常的情況下,這會阻止你的框架乾淨地退出會話。

由於我們無法看到您如何管理WebDriver會話的整個畫面,因此它只是一個猜謎遊戲。

驅動程序本身可以通過命令行被終止,例如, taskkill(或你正在使用的任何操作系統),這可以通過例如執行。 https://github.com/zeroturnaround/zt-exec庫。但這只是一種解決方法,它將隱藏您的架構的潛在弱點。

1

既然您點擊了打開一個新窗口的鏈接,我們最初必須存儲父窗口的WindowHandle,我們稍後將使用它來遍歷父窗口。一旦新窗口打開,點擊鏈接Terms of Use,我們將把Selenium的焦點轉移到新窗口,在那裏執行我們的任務並最終關閉它。然後,我們必須轉移Selenium的焦點回到父窗口,通過父窗口的句柄如下:

driver.navigate().to("someurl.com"); 
    String parent = driver.getWindowHandle(); 
    System.out.println("Parent Window ID is : "+parent); 
    driver.findElement(By.xpath("Link_of_Terms_of_Use_opens_New_Window")).click(); 
    System.out.println("Home Page is loaded Successfully and Terms of Use Link is clicked"); 
    Set<String> allWindows = driver.getWindowHandles(); 
    int count = allWindows.size(); 
    System.out.println("Total Windows : "+count); 
    for(String child:allWindows) 
    { 
     if(!parent.equalsIgnoreCase(child)) 
     { 
      driver.switchTo().window(child); 
      System.out.println("Child Window Title is: "+driver.getTitle()); 
      //perform all your tasks in the new window here 
      driver.close(); 
     } 
    } 
    driver.switchTo().window(parent); 
    System.out.println("Parent Window Title is: "+driver.getTitle());