我们可以只运行一次 chrome 驱动程序与 selenium ,而重复自动化?

bxgwgixi  于 2023-02-10  发布在  Go
关注(0)|答案(3)|浏览(247)

我使用Selenium来执行自动化。但是,如果我重复自动化,我有很多chromedrivers。
我想解决这个问题。你不能只运行一个chromedriver吗?

beq87vna

beq87vna1#

留下 * driver. exe进程的原因很可能是因为您没有在测试运行结束时显式关闭它们--用您选择的语言调用驱动程序对象上的quit()方法。
这一步通常在对象的析构函数中完成--如果你使用面向对象的方法;finally块,如果它是异常处理;大多数高级框架(Cucumber,TestNG,Robotframework,不同语言中过多的单元测试)都有某种类型的"拆卸"块,通常用于此目的。
为什么会这样呢?
当您启动自动化时,操作系统会启动自动化进程;当你示例化一个webdriver对象时,它会为浏览器的驱动程序--在你的例子中是"chromedriver.exe"--产生一个进程。2下一步是打开浏览器示例--"chrome.exe"。
当你的运行结束时,它的进程被关闭,但是,如果你没有显式地调用quit()方法-浏览器的驱动程序仍然存在,"保持活动";并且现在是一个孤立的进程(不要被误认为是僵尸进程,这是完全不同的事情)-功能齐全,但是-没有程序来命令它。
事实上,在这个阶段-有一个工作的驱动程序进程和一个浏览器,你可以重新连接到它,并在未来的运行中使用。

erhoui1w

erhoui1w2#

根据您提供的屏幕截图,您的系统中似乎存在几个Zombie ChromeDriver process
直接回答,您不能在 * 重复自动化 * 的同时只启动一个ChromeDriver进程,因为您无法重新连接到上一个浏览会话。您可以在如何重新连接到使用selenium的webdriver打开的浏览器中找到详细的讨论?
您的代码试验将使我们更深入地了解ChromeDriver进程未被清理的原因。根据最佳实践,始终在tearDown(){}方法中调用driver.quit(),以正常关闭并销毁 WebDriverWeb Client 示例,如下所示:

driver.quit() // Python
//or
driver.quit(); // Java
//
driver.Quit(); // DotNet

您可以在PhantomJS Web驱动程序驻留在内存中找到详细的讨论
如果ChromeDriver进程仍然没有被销毁和删除,您可能需要从任务列表中删除这些进程。您可以在Selenium中找到详细的讨论:如何停止geckodriver进程影响PC内存,而不调用driver.quit()?

  • Python解决方案(跨平台):
import os
import psutil

PROCNAME = "geckodriver" # or chromedriver or IEDriverServer
for proc in psutil.process_iter():
    # check whether the process name matches
    if proc.name() == PROCNAME:
        proc.kill()
cxfofazt

cxfofazt3#

我在测试结束时使用清理例程来清除僵尸进程、临时文件等(Windows、Java)
导入组织文件实用程序;导入java.util.logging.Logger;
导入java.io.文件;导入java.io.IOException;
公共类测试清理{

protected static Logger logger = Logger.getLogger(TestCleanup.class.getName());

public void removeTemporaryFiles() {
    try {
        FileUtils.cleanDirectory(new File(getPropertyValue("java.io.tmpdir")));
    } catch (IOException ioException) {
        logger.info("IOexception trying to clean the downloads directory: " + ioException.getMessage());
    }
}

public void closeWebdriver() {
    webDriver.close();
}

public void killOperatingSystemSessions() {
    try {
        Process process = Runtime.getRuntime().exec("taskkill /IM \"chromedriver.exe\" /F");
    } catch (IOException ioException) {
        logger.info("Exception when shutting down chromedriver process: " + ioException.getMessage());
    }
}

}

相关问题