【问题标题】:How to address the error The file geckodriver.exe is being used by another process using Firefox and Selenium C#如何解决错误文件 geckodriver.exe 正在被另一个使用 Firefox 和 Selenium C# 的进程使用
【发布时间】:2022-01-01 15:05:34
【问题描述】:

我正在尝试使用 selenium c# 在 Chrome 和 Firefox 中运行我的测试。 问题是,当安装 Selenium.WebDriver.GeckoDriver 以便能够在 Firefox 浏览器上运行测试时,它会破坏我的代码,并且我无法在 chrome 或 Firefox 中运行测试。 有什么想法吗?

我已经安装了

  • Selenium.WebDriver
  • Selenium.WebDriver.ChromeDriver
  • Selenium.Firefox.WebDriver
  • Selenium.WebDriver.GeckoDriver

错误:

The file geckodriver.exe is being used by another process   

另一个错误:

The file is locked by geckodriver

代码试验:

using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using System;

    internal class Program
        {
            IWebDriver driver = new ChromeDriver();
            //IWebDriver driver = new FirefoxDriver();
            static void Main(string[] args)
            {
            }
            [SetUp] //method to initialize page with windows maximized. 
            public void Initialize()
            {
                driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);
                driver.Navigate().GoToUrl("https://www.demo.bnz.co.nz/client/");
                driver.Manage().Window.Maximize();
                driver.Manage().Cookies.DeleteAllCookies();
            }
public void Payees()
        {
            System.Threading.Thread.Sleep(10000); //verify if page is loaded 
            IWebElement element = driver.FindElement(By.XPath("//*[@id='left']/div[1]/div/button"));//menu            
            element.Click();
            driver.FindElement(By.XPath("//*[@id='left']/div[1]/div/div[3]/section/div[2]/nav[1]/ul/li[3]/a")).Click(); //payes
        }

【问题讨论】:

  • 用错误堆栈跟踪更新问题。
  • 错误是什么?
  • 说“文件 geckodriver.exe 正被另一个进程使用”
  • 另一个错误:“文件被 geckodriver 锁定”

标签: c# selenium firefox geckodriver selenium-firefoxdriver


【解决方案1】:

此错误消息...

"The file geckodriver.exe is being used by another process

The file is locked by geckodriver

...表示上一个测试执行的剩余GeckoDriver 进程占用了您的系统内存。

除非删除那些悬空的GeckoDriver 进程,否则您的程序将无法启动新的GeckoDriver 服务。

要杀死剩余进程,您可以使用以下代码块:

  • 使用GetProcessesByName()

    foreach (var process in Process.GetProcessesByName("geckodriver"))
    {
        process.Kill();
    }
    
  • 使用Process.GetProcesses()过滤掉需要的进程:

    var chromeDriverProcesses = Process.GetProcesses();
        Where(pr => pr.ProcessName == "chromedriver"); // without .exe
    
    foreach (var process in chromeDriverProcesses)
    {
       process.Kill();
    }
    

理想的解决方案

理想情况下,要摆脱这个冗余进程,请始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。


参考文献

您可以在以下位置找到一些相关的详细讨论:

【讨论】:

  • 我应该在代码的什么地方使用这个方法?
  • @Yorda 检查添加的详细信息和参考。
  • 我的代码已经拆解,但被评论了。我会取消选中它。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多