如何解决这一错误的文件geckodriver.exe 正在使用由另一种过程使用火狐和硒C#

0

的问题

我试图运行我的测试在铬和Firefox使用硒。 问题是,当安装硒。WebDriver.GeckoDriver能够运行测试Firefox浏览器,它打破了我的码我不能运行测试,在铬或Firefox。 任何想法?

我已经安装了

  • 硒。WebDriver
  • 硒。WebDriver.ChromeDriver
  • 硒。Firefox。WebDriver
  • 硒。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
        }
c# firefox geckodriver selenium
2021-11-23 04:45:24
1

最好的答案

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();
    }
    

理想的解决方案

想摆脱这种冗余过程中总是引用 driver.quit()tearDown(){} 方法关闭和摧毁的 WebDriver网客户 情况正常。


参考文献

你可以找到一对夫妇的相关详细讨论:

2021-11-23 05:23:33

在那里在我的代码我应该使用这种方法?
Yorda

@Yorda检查的添加细节和参考文献。
DebanjanB

我已经拆除,在我的代码,但是评论。 我会取消。 感谢
Yorda

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................