我有一个需要在浏览器中进行UI测试的测试自动化项目。对于这个项目,我设置了一个。Core 3.1项目使用以下包:
<PackageReference Include="FluentAssertions" Version="5.10.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.8" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3" />
<PackageReference Include="Microsoft.TestPlatform.TestHost" Version="16.8.3" />
<PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="87.0.4280.8800" />
<PackageReference Include="Selenium.WebDriver.GeckoDriver" Version="0.27.0" />
<PackageReference Include="Selenium.WebDriver.IEDriver" Version="3.150.1.2" />
<PackageReference Include="SpecFlow" Version="3.5.14" />
<PackageReference Include="SpecFlow.Tools.MsBuild.Generation" Version="3.5.14" />
<PackageReference Include="SpecRun.SpecFlow" Version="3.5.22" />
当我尝试运行任何测试时,我得到以下错误:
当前目录或PATH环境变量下的目录中不存在chromedriver.exe文件。驱动程序可从http://chromedriver.storage.googleapis.com/index.html下载。
然而,chromedriver包含在Selenium.WebDriver.ChromeDriver包中。它应该在构建过程中复制到bin文件夹,所以我检查了文件夹,它存在。
所以我认为当前目录不是bin文件夹而是其他文件夹,所以我改变了我的代码,并将当前目录作为参数传递给chromedriver,如下所示:
...
var driver new ChromeDriver(System.IO.Directory.GetCurrentDirectory());
...
现在我得到以下错误:
文件C:pathtoprojectTestResultschromedriver.exe不存在。驱动程序可在http://chromedriver.storage.googleapis.com/index.html
下载。
表示当前目录不是bin文件夹,而是我的测试结果的输出文件夹。
如何更改此行为,使其自动查找正确的文件夹?
率对于一个类似的问题,我找到了如下的解决方法。然而,此解决方案依赖于硬编码路径,完整路径/驱动程序版本或平台/配置。这不是一个选项,因为我的意图是在不同的环境中使用相同的代码。
您正在使用SpecFlow+ Runner,它默认使用进程隔离来分离线程。因此,工作目录不是输出目录。
你有两个选择:
- 通过API从SpecFlow+ Runner获取文件夹
我们有一个API来获取输出文件夹。通过上下文注入获取一个TestRunContext的实例,并使用TestDirectory属性(https://docs.specflow.org/projects/specflow-runner/en/latest/Usage/SpecFlow-Runner-APIs.html#string-testdirectory-get)。
- 切换到共享应用域
如果您不需要在测试线程之间进行隔离,我才会这样做。
输入你的Default.srProfile
<Environment testThreadIsolation="SharedAppDomain" />
整个文件看起来应该像这样:https://github.com/SpecFlowOSS/Streaming-Projects/blob/main/CommunityContentSubmissionPage/CommunityContentSubmissionPage.Specs/Default.srprofile
全面披露:我是SpecFlow和SpecFlow+的社区经理