簡體   English   中英

如何通過項目已發布的安裝程序在 [PATH] 中安裝 Selenium 的 webdriver.exe?

[英]How can I install Selenium’s webdriver.exe in [PATH] htrough the project’s published installer?

我有一個使用 Selenium 的 Windows Forms 應用程序。我有多個需要運行此應用程序的生產客戶端,我注意到在每個新客戶端(以及當我需要更新 webdriver 時)我需要復制並粘貼。 exe 到 [PATH] 位置 (%USERPROFILE%\AppData\Local\Microsoft\WindowsApps),我想使用每次發布應用程序時 Visual Studio 生成的安裝文件自動執行它。

我發現你可以安裝一個名為“Microsoft Visual Studio Installer Project”的擴展,在其上包含 .exe 文件,或者創建一個新表單來檢查 webdriver 是否到位以及是否不復制它,或者我可以更改 IWebDriver object 的 [PATH] 以反映此文件的新路徑。 作為獎勵,您還可以添加桌面圖標。

但在我開始尋找解決方法之前,首先我想知道是否有辦法通過“發布向導”參數將這個 webdriver.exe 文件發布到它的正確地址。

這適用於我的用例,對於上下文,我使用的是 windows forms 項目,目標是 .NET(框架)4.7.1。 這些是我的事件“加載”和“顯示”的片段,格式為不同的 function。我只包含了文件檢查、下載和解壓縮背后的邏輯。 由於此版本 .NET 的 System.IO.Compression.ZipFile class 本身不支持覆蓋文件,因此我使用了從 NuGet 下載的 Ionic 的 DotNetZip package。

using Ionic.Zip;
using System;
using System.Diagnostics;
using System.IO;
using System.Net;

private void DriverCheck(){
    string edge, edgeVersion, edgeDriverPath, edgeDriver, edgeDriverVersion;
    edge = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe";
    edgeVersion = FileVersionInfo.GetVersionInfo(edge).FileVersion;
    edgeDriverPath = Environment.GetEnvironmentVariable("LocalAppData") + "\\Microsoft\\WindowsApps\\";
    edgeDriver = edgeDriverPath + "msedgedriver.exe";
    try
    {
        edgeDriverVersion = FileVersionInfo.GetVersionInfo(edgeDriver).FileVersion;
    }
    catch
    {
        edgeDriverVersion = null;
    }
    if (!File.Exists(edgeDriver) || edgeVersion != edgeDriverVersion)
    {
        try
        {
            using (var client = new WebClient())
            {
                string winver;
                if (Environment.Is64BitProcess)
                {
                    winver = "64";
                }
                else
                {
                    winver = "32";
                }
                string zipPath = edgeDriverPath + "edgedriver_win64.zip";
                client.DownloadFile("https://msedgedriver.azureedge.net/" + edgeVersion + "/edgedriver_win" + winver + ".zip", zipPath);
                using (ZipFile zip = ZipFile.Read(zipPath))
                {
                    foreach (ZipEntry temp in zip)
                    {
                        temp.Extract(edgeDriverPath, ExtractExistingFileAction.OverwriteSilently);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error downloading webdriver:\n" + ex.Message);
            Application.Exit();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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