4

我正在使用Azure DevOps Server 2019(简称 ADOS,安装在本地)在 C# 中运行基于 Selenium 的端到端测试。

chromedriver.exe在没有正确停止我的 Selenium 测试使用的过程的情况下,构建有时会以糟糕的方式结束。因此,后续构建在Initialize Job步骤失败,并出现如下错误:

发生一个或多个错误。(访问路径“C:...\chromedriver.exe”被拒绝。)

我从中了解到的是,由于仍在运行 ADOS在构建运行开始时尝试清理工作文件夹时chromedriver.exe无法删除其文件。.exe

我尝试禁用Get sources步骤定义的Clean功能,但这只会将错误向前移动到Checkout步骤。

为了解决这个问题,我不得不手动将 RDP 导入我的代理机器,taskkill /IM chromedriver.exe /F然后重新运行失败的构建。

我的问题是- 如何防止访问被拒绝错误?我已经想到了这些方法,但我不确定哪种方法实用:

  1. 在获取源步骤taskkill之前让 ADOS 自动运行。如何?

  2. 使代理具有更高的权限,以便chromedriver.exe即使在其进程仍在运行时也可以删除。再说一遍,怎么做?

4

2 回答 2

3

如果你的假设是正确的:

我从中了解到的是,由于仍在运行 ADOS在构建运行开始时尝试清理工作文件夹时chromedriver.exe无法删除其文件。.exe

确保在每次测试结束时都使用driver.close()以及方法。driver.quit()

使用拆解来确保它总是会发生。

编辑:

正如 OP 评论的那样:

当我取消 ADOS 构建时,测试步骤突然终止并且不执行拆卸步骤。

我的建议是一种atexit方法。

对于 C# 使用ProcessExit 事件(归功于@Fredrik Mörk回答

对于 Python 使用atexit

于 2019-11-14T09:31:44.620 回答
2

我提出了一个基于 ADOS Pipelines 功能的解决方案。在我的 Visual Studio 测试任务之后,我添加了一个命令行任务并将其配置如下:

  1. 脚本是' ' 。taskkill/IM chromedriver.exe /F
  2. 在我设置的 控制选项下:
    • 将此任务运行“自定义条件”
    • 自定义条件为“ canceled()
    • 继续检查错误。

这样,每当我的构建被手动取消时,该chromedriver.exe进程的所有实例都会终止,从而为后续构建的运行扫清道路。

于 2019-11-18T09:13:08.187 回答