2017-08-14 76 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());