我正试图使用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
}
此错误消息。。。
"The file geckodriver.exe is being used by another process
和
The file is locked by geckodriver
意味着上一次测试执行的GeckoDriver进程会占用系统内存。
除非那些悬挂的GeckoDriver进程被删除,否则您的程序将无法启动新的Gecko Driver服务。
要杀死剩余进程,您可以使用以下代码块:
使用
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(); }
理想解决方案
理想情况下,为了摆脱这种冗余过程,总是调用CCD_ 4方法中的CCD_;优雅地销毁WebDriver和Web客户端实例。
参考文献
您可以在中找到一些相关的详细讨论
- Selenium:如何在不调用driver.quit((的情况下阻止geckodriver进程影响PC内存
- 硒引发的ChromeDriver在后台运行
- 如何使用Python退出所有通过GeckoDriver和Selenium启动的Firefox进程