![](/img/trans.png)
[英]OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:60623/'
[英]OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:20548/'
當我嘗試打開 EdgeDriver 時出現以下錯誤。
OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:20548/'
FirefoxDriver 和 ChromeDriver 工作得很好。
這是驅動的問題?
端口 20548 上沒有任何運行。下面的代碼不返回任何內容。
C:\WINDOWS\system32>netstat -a -o | find "20548"
除了將 Selenium.WebDriver.MicrosoftWebDriver NuGet 下載到我的項目中之外,我還需要做任何其他事情嗎?
OpenQA.Selenium.WebDriverException: '無法在http://localhost:20548/上啟動驅動程序服務'
對於這個問題,可能是WebDriver的某個進程還在后台運行。 請嘗試啟動任務管理器以查看並結束它。
否則,您可以嘗試使用以下代碼來分配 webdeiver 服務器:
var driverpath = @"C:\Program Files (x86)\Microsoft Web Driver"; //find the web driver path
var driver = new EdgeDriver(driverpath);
// Navigate to Bing
driver.Url = "https://www.bing.com/";
// Find the search box and query for webdriver
var element = driver.FindElementById("sb_form_q");
element.SendKeys("webdriver");
element.SendKeys(Keys.Enter);
Console.ReadLine();
driver.Quit();
此版本的 MicrosoftWebDriver.exe 與已安裝的 Windows 10 版本不兼容。
請查看本文以根據您的 Edge 瀏覽器版本下載相關的 Microsoft WebDriver 版本。
那么可以參考這篇文章來使用WebDriver。
我嘗試運行位於我的項目(項目名稱,Test)的 bin 目錄中的 MicrosoftWebDriver.exe。 這給了我需要的答案。
我從以下網站下載了正確的驅動程序:
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads
================================================== ======
進一步更新和解決方案:如何知道要獲取哪個驅動程序...
我終於找到了正確的驅動程序。 有兩種方法可以獲取驅動程序。
方法一:如何知道下載哪個驅動
方法二:如何知道下載哪個驅動
在選擇多個運行設置文件時,我們也會收到此錯誤。
要解決這個問題,我們必須從 VS 的 Test 選項卡中取消選擇所有選定的運行設置文件,然后選擇任何一個運行設置文件,然后運行您的測試用例
這個異常“OpenQA.Selenium.WebDriverException: 'Cannot start the driver service”可能是因為進程(即chrome,chromeDriver)仍在后台運行而發生的。 我們遇到了類似的問題,我們在 Selenium 和 C# 測試項目中解決了
a) 如果你不經常執行測試方法/特定代碼,你可以一個接一個地使用所有進程/實例終止方法Close()、Quit()、Dispose()!
但是,在使用上述內容后仍然出現異常,那么您可以嘗試以下解決方案(C# 代碼)(我們使用了 class“ManagementObjectResearcher”,用於管理與操作系統相關的內容,如硬盤驅動程序、外部設備和進程,通過使用此 class,您可以提供 WQL 查詢並找到所有具有進程 ID 的進程,並使用其進程 ID 終止所有進程,這將克服進程死鎖問題)
//Method overloading - To terminate process with releasing memory with reference of PIDpublic void KillProcess(string p_name)
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher
("Select * From Win32_Process Where Name = '" + p_name + "'");
ManagementObjectCollection moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
try
{
KillProcess(Convert.ToInt32(mo["ProcessID"]));
}
catch (ArgumentException)
{
break;
}
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
//locate each and every PID
public void KillProcess(int pid)
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher
("Select * From Win32_Process Where ParentProcessID=" + pid);
ManagementObjectCollection moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
try
{
KillProcess(Convert.ToInt32(mo["ProcessID"]));
}
catch
{
break;
}
}
try
{
Process proc = Process.GetProcessById(pid);
proc.Kill();
}
catch (ArgumentException)
{
// Process already exited.
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
並在 Teardown 中使用以下內容
KillProcess("chrome.exe");
Thread.Sleep(2000);
KillProcess("chromedriver.exe");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.