Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版)


selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。

1 /** 2  * Close the current window, quitting the browser if it's the last window currently open. 3 */ 4 void close(); 5 6 /** 7  * Quits this driver, closing every associated window. 8 */ 9 void quit();

通过查看以上官方声明文档,可以看出close方法是关闭当前窗口,这个当前如何理解?就是driver实例操作的页面,叫当前。如果当前窗口只有一个tab,那么这个close方法就相当于关闭了浏览器。quit方法就是直接退出并关闭所有关联的tab窗口。所以,close方法一般关闭一个tab,quit方法才是我们认为的完全关闭浏览器方法。为了证明这个,我们用一个例子去演示:

 1 package lessons;  2  3 import org.openqa.selenium.By;  4 import org.openqa.selenium.WebDriver;  5 import org.openqa.selenium.chrome.ChromeDriver;  6  7 public class FindElement_LinkText {  8  9 public static void main(String[] args) throws Exception { 10 11 System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe"); 12 13 WebDriver driver = new ChromeDriver(); 14  driver.manage().window().maximize(); 15 16 driver.get("https://www.baidu.com"); 17 18  driver.close(); 19 //driver.quit(); 20  } 21 22 }

通过切换注销最后两行代码,分别运行,观察这两种方法的实际效果。当使用close方法的时候,因为只有百度首页这个tab,所以会关闭浏览器,但是通过查看任务管理器发现,ChromeDriver进程仍存在内存中。如果使用quit方法,整个浏览器都直接关闭,ChromeDriver进程也会被结束。

 

ChromeDriver是轻量级的服务,在单任务或不需要频繁启动浏览器的情况下,使用driver.quit()关闭浏览器,可以正常结束ChromeDriver进程。若在一个比较大的 测试套件中频繁的启动关闭,会增加一个比较明显的延时导致浏览器进程不被关闭的情况发生,为了避免这一状况我们可以通过ChromeDriverService来控制ChromeDriver进程的生死,达到用完就关闭的效果避免进程占用情况出现(Running the  server in a child process)。具体实现如下:

1 ChromeDriverService service = new ChromeDriverService.Builder() .usingChromeDriverExecutable(new File("E:\\reyo\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe")).usingAnyFreePort().build(); 2 service.start(); 3 driver = new ChromeDriver(); 4 driver.get("http://www.baidu.com"); 5 driver.quit(); 6 // 关闭 ChromeDriver 接口 7 service.stop();


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM