簡體   English   中英

OpenQA.Selenium.WebDriverException:“無法在 http://localhost:20548/ 上啟動驅動程序服務”

[英]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 下載到我的項目中之外,我還需要做任何其他事情嗎?

在此處輸入圖像描述

我需要在計算機上安裝的唯一軟件是最新版本的 Microsoft Edge 是否正確? 在此處輸入圖像描述

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

在此處輸入圖片說明

================================================== ======

進一步更新和解決方案:如何知道要獲取哪個驅動程序...

我終於找到了正確的驅動程序。 有兩種方法可以獲取驅動程序。

  1. 通過從 Microsoft 開發者網站下載
  2. 在visual studio NuGet manager中找到它,讓manager將其配置到你的項目中(首選方法)

方法一:如何知道下載哪個驅動

  1. 轉到Microsoft 開發人員網站
  2. 在 Edge 瀏覽器上找到版本號等於版本號的版本在此處輸入圖片說明
  3. 配置您的項目以找到並使用您下載的 MicrosoftWebDriver.exe

方法二:如何知道下載哪個驅動

  1. 在 VS 中打開您的測試項目並打開 NuGet 包管理器
  2. 瀏覽 Selenium.WebDriver.MicrosoftWebDriver
    • 找到版本號的后半部分與邊緣瀏覽器的 Microsoft EdgeHTML 版本號的后半部分匹配的 webdriver 版本(根本不明顯)。 在此處輸入圖片說明
  3. 點擊安裝按鈕。 一切都將在您的項目中自動配置,以便您可以自動開始使用驅動程序

  4. 將幾行 Selenium 代碼添加到您的測試項目中,這將打開邊緣瀏覽器(如原始問題所示)。

在選擇多個運行設置文件時,我們也會收到此錯誤。

要解決這個問題,我們必須從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM