首先,这里使用的技术包括:Visual Studio、C#、Selenium WebDriver、Google Chrome 和 MS Excel。
我正在构建一个自动化框架来测试多个 Web 应用程序。我正在使用 Excel 电子表格来提取可变数据,以便其他测试人员可以更轻松地使用测试。在我们的冒烟测试期间,我们运行了几个我按顺序构建的单元测试。因此,我认为创建有序测试是个好主意。单独运行每个测试时,它们工作得很好。但是,一旦我开始运行有序测试,列表中的第一个测试将运行,但随后出现此错误:
System.Runtime.InteropServices.InvalidComObjectException:无法使用已与其基础 RCW 分离的 COM 对象。
我在一个名为 ReadFile 的类中创建了对我的 Excel 电子表格的引用:
static Excel.Application xlApp = new Excel.Application();
static Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"SPREADSHEET LOCATION");
static Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
static Excel.Range xlRange = xlWorksheet.UsedRange;
当我的测试通过或失败时,它们会调用 CleanUp 方法,该方法包括退出 chromedriver 并调用 ReadFile.Close() 方法:
xlWorkbook.Save();
xlWorkbook.Close(Type.Missing, Type.Missing, Type.Missing);
xlApp.Quit();
GC.Collect();
GC.WaitForPendingFinalizers();
我做了很多研究,发现可能需要调用 Mashall.FinalReleaseComObject。我也尝试过使用它,但似乎没有什么不同。我还注意到 Excel 进程在第一次测试完成后继续运行几秒钟。所以我尝试让线程休眠,让它在下一次测试开始之前等待 Excel 完全关闭,但是当 Excel 被删除时它也会立即抛出异常(即使睡眠定时器还没有完成)。
无论如何,在这一点上,我正在寻找任何可能的指导,非常感谢。请记住,我不是任何这些技术的专家。