VS 2015:运行单元测试来自控制台,Selenium ChromeDriver问题

时间:2018-01-17 11:08:03

标签: unit-testing selenium-webdriver visual-studio-2015 selenium-chromedriver vs-unit-testing-framework

我在这里100%新,我不确定在发布这个问题之前是否还有其他事情。但是在搜索时我没有找到关于这个问题的任何内容,所以这里有:

我有一个使用Selenium ChromeDriver实现网站自动化的解决方案框架,以及一个用于运行测试的单元测试项目。

可以从VS Test Explorer中正常运行测试。但是当我尝试使用

从VS控制台运行它们时
MSTest.exe /testcontainer:d:\Source\Workspaces\QA\Automation\Tests\bin\Debug\Tests.dll /resultsfile:d:\QA\testresults\autotests\regressiontests\tests.trx

我在结果文件中收到这些错误:

Test method Tests.BasicTests.Data.GetSiteData.GetMyElementId threw exception:
System.Exception: File not found
at Bytescout.Spreadsheet.Spreadsheet.LoadFromFile(String FileName, CacheType Cache, String Delimiter, Encoding Encoding, String Password)
at Bytescout.Spreadsheet.Spreadsheet.LoadFromFile(String FileName)
at TestData.Readers.ExcelByteScout.ExcelFindRows(String url, String sheetname, String value, Int32 col) in d:\Source\Workspaces\QA\FlowAutomation\TestData\Readers\EscelByteScout.cs:line 113
at TestData.SiteData.MyElements.GetElementId(String location, String element) in d:\Source\Workspaces\QA\Automation\TestData\SiteData\MyElements.cs:line 27
at Tests.BasicTests.Data.GetSiteData.GetMyElementId() in d:\Source\Workspaces\QA\Automation\Tests\BasicTests\Data\GetSiteData.cs:line 13
  • 这是抱怨项目 - >解决方案中的类,它从excel文件中读取测试数据(用户登录,CSS元素......)。

Initialization method Tests.TestTests.OpenTests.OpenMyLabDrop2.Init threw exception. OpenQA.Selenium.DriverServiceNotFoundException: OpenQA.Selenium.DriverServiceNotFoundException: The chromedriver.exe file does not exist in the current directory or in a directory on the PATH environment variable. The driver can be downloaded at http://chromedriver.storage.googleapis.com/index.html..
at OpenQA.Selenium.DriverService.FindDriverServiceExecutable(String executableName, Uri downloadUrl)
at OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService()
at Common.Selenium.GCDriver.Initialize() in d:\Source\Workspaces\QA\FlowAutomation\Common\Selenium\GCDriver.cs:line 19
at FlowTests.Base.MyLabDrop2Test.Init() in d:\Source\Workspaces\QA\FlowAutomation\FlowTests\Base\MyLabDrop2Test.cs:line 15
  • 这抱怨丢失了ChromeDriver.exe,并且不会丢失。

我并不完全是VS和Selenium的新手,但是我不知道,因为VS的测试运行良好,但抱怨控制台缺少引用。

所以我很确定在从控制台运行测试时我会遗漏一些东西,但是什么?

编辑:

来自ExceByteScout.cs的相关代码:

using System;
using System.Collections.Generic;
using Bytescout.Spreadsheet;

namespace TestData.Readers {
    public class ExcelByteScout {
        public static List<string> ExcelReturnXYZ(string url, string sheetname, string cell1, string cell2, string cell3) {
        Spreadsheet document = new Spreadsheet();
        document.LoadFromFile(url);
        Worksheet worksheet = document.Workbook.Worksheets.ByName(sheetname);
        List<string> cellvalues = new List<string>();

        string name = worksheet.Cell(cell1).Value.ToString();
        string user = worksheet.Cell(cell2).Value.ToString();
        string pass = worksheet.Cell(cell3).Value.ToString();
        cellvalues.Add(name);
        cellvalues.Add(user);
        cellvalues.Add(pass);

        document.Close();

        return cellvalues;
    }

    public static string[] ExcelFindRows(string url, string sheetname, string value, int col) {
        Spreadsheet document = new Spreadsheet();
        Worksheet worksheet = null;
        List<string> values = new List<string>();
        string[] userdata = null;

        try {
            document.LoadFromFile(url);
        }
        catch (System.Exception ex) {
            System.Diagnostics.Debug.WriteLine(ex.Message);
            throw;
        }

        try {
            worksheet = document.Workbook.Worksheets.ByName(sheetname);
        }
        catch (System.NullReferenceException nrex) {
            System.Diagnostics.Debug.WriteLine(nrex.Message);
            throw;
        }

        int i = 0;
        while (!worksheet.Cell(i, col).ValueAsString.Equals("")) {
            if (worksheet.Cell(i, col).ValueAsString.Equals(value)) {
                int rowcellcount = 0;

                for (int y = 0; !worksheet.Cell(i, y).ValueAsString.Equals(""); y++) {
                    rowcellcount++;
                }

                userdata = new string[rowcellcount];
                for (int x = 0; x < rowcellcount; x++) {
                    userdata[x] = worksheet.Cell(i, x).ValueAsString;
                }

                break;
            }
            i++;
        }

        document.Close();
        return userdata
    }       

更新

FileNotFound问题是由于相对路径造成的。

但ChromeDriver未找到问题是一个谜。特别是因为这在以前的工作中有效,但是在不同的解决方案中,但是从控制台运行测试的方式完全相同。

另外,当我运行MSTest.exe时,我正站在项目的/ Debug文件夹中,并且chromedriver.exe IS在此文件夹中。我看不出它需要的其他地方?

1 个答案:

答案 0 :(得分:1)

找不到文件通常意味着在您期望的位置找不到该文件。这可能是因为您从其他路径运行或未复制该文件。

检查行document.LoadFromFile(url)之前的url;通过Console.WriteLine(url)。然后将excel复制到正确的位置或修复该URL。