我已通过 NuGet 包管理器在我的 .NET 桌面应用程序中安装了 Selenium Web 驱动程序。
注意:这是一个 .NET Framework 项目,而不是 .NET Core 或 Web 项目。
现在每次 Chrome 更新时,此已安装软件包的旧版本都会使我的应用程序崩溃。而且我必须手动更新它。所以我想我可以在每次运行我的应用程序时检查并更新网络驱动程序。
我尝试过的
// ID of the package to be looked up
string packageID = "Selenium.WebDriver.ChromeDriver";
string pathToMyAppFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
// Connect to the official package repository IPackageRepository
IPackageRepository repo = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2");
// Get the list of all NuGet packages with ID 'Selenium.WebDriver.ChromeDriver'
List<IPackage> packages = repo.FindPackagesById(packageID).ToList();
// Filter the list of packages that are Release (Stable) versions and select the latest version
string latestVersion = packages.Where(item => (item.IsReleaseVersion() == true)).Max(p => p.Version).ToString();
// Initialize the package manager string path = <PATH_TO_WHERE_THE_PACKAGES_SHOULD_BE_INSTALLED>
PackageManager packageManager = new PackageManager(repo, path);
// Update the package
packageManager.UpdatePackage(packageID, SemanticVersion.Parse(latestVersion), true, false);
我被困住的地方
// Update the package
packageManager.UpdatePackage(packageID, SemanticVersion.Parse(latestVersion), true, false);
在这一行,我收到错误:
无法找到包“Selenium.WebDriver.ChromeDriver”
当我检查调试文件夹时,我发现那里只有
chromedriver.exe
。我发现 NuGet 已将整个 webdriver 包安装在我正在处理的项目的 packages
文件夹中。像这样的东西:
C:\path\to\VisualStudio\projects\ProjectFolder\packages\Selenium.WebDriver.ChromeDriver.101.0.4951.4100\driver\win32\chromedriver.exe
我想在表单加载事件本身更新此包。我不确定这个方法是否会更新我的
.csproj
文件。
有人可以帮我吗?预先感谢。
您可以使用 WebDriver Service 或 WebDriverManager 包,而不是尝试以编程方式处理最新版本的 WebDriver - 两者都会自动下载正确版本的 WebDriver。
Selenium Manager(自 Selenium.WebDriver 4.6 起可用)。它还具有管理每个浏览器实例的 WebDriver 生命周期的好处。
var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("mute-audio"); //just for reference
var service = ChromeDriverService.CreateDefaultService(); //this automatically downloads a WebDriver and passes into your driver instance
IWebDriver DriverInstance = new ChromeDriver(service, chromeOptions);
WebDriverManager - 有些人仍在使用它。我个人不推荐它,因为它是一个第三方库,最终可能会因为 Selenium Manager 的存在而变得过时。
var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument("mute-audio"); //just for reference
new DriverManager().SetUpDriver(new ChromeConfig(), VersionResolveStrategy.MatchingBrowser, Architecture.X64);
IWebDriver DriverInstance = new ChromeDriver(service, chromeOptions);