在Selenium / Java中杀死chromedriver进程



我目前使用"定期构建"选项通过 Jenkins 运行多个 Java 程序,并使用 H 06 * * 1-5(周一至周五每天上午 6 点至早上 7 点之间运行它(。

在某些程序中,我单击链接会打开一个新窗口。因此,我使用以下代码

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# 的答案。

谢谢

不要在特定页面上使用driver.close(),顺其自然,并在驱动程序工厂中使用以下代码:

//This closes the browser after each test class 
@AfterClass
public void tearDown()
{
driver.quit();
}

它应该有帮助。

我是新手,还在学习。我最近注意到我的可用内存不足。直到那时我才发现进程下有很多 chromedriver 实例.exe(和 geckodriver.exe 用于 FF(。我用它来杀死我的ChromeDriver.exe实例。

Runtime.getRuntime().exec("taskkill /F /IM ChromeDriver.exe");

它工作得很好。

由于您正在单击打开新窗口的链接,因此最初我们必须存储父窗口的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());

finally块中使用taskkill,如下所示。它将在以下chromedriver.exe杀死任务:

finally {
if(System.getProperty("os.name").contains("Windows")) {
Process process = Runtime. getRuntime(). exec("taskkill /F /IM chromedriver.exe /T");
process.destroy();
}
}

根本原因可能在另一个地方。此类问题通常发生在引发意外异常的情况下,这会阻止您的框架完全退出会话。

由于我们无法看到您如何管理 WebDriver 会话的全貌,因此这只是一个猜谜游戏。

驱动程序本身可以通过命令行被杀死,例如taskkill(或您使用的任何操作系统(,可以通过例如 https://github.com/zeroturnaround/zt-exec 库执行。但这只是一个解决方法,它将隐藏架构的潜在弱点。

taskkill /FI "IMAGENAME eq chromedriver.exe" /F可以为你创造魔力

相关内容

  • 没有找到相关文章

最新更新