C#Selenium FirefoxDriver毁了我的代码我猜?

时间:2017-04-02 12:27:15

标签: c# selenium google-sheets-api

我遇到了一个奇怪的错误。 这是回顾。 我有一个util课程,可以将我所有的好东西都存储在一个应用程序中(对于我来说,在一个课程中存储不相关的东西,代码礼仪等等,对我来说不是太明亮),它看起来像这样:

public static class util
{
    public static IWebDriver driver = new PhantomJSDriver();
    public static string spreadsheetId = "I won't show you my pantsu, senpai!";
    //more definitions and some methods here....
}

我的主要方法几乎是Google快速入门应用的直接副本,如下所示:

static string[] Scopes = { SheetsService.Scope.Spreadsheets };
static string ApplicationName = "I";

static void Main(string[] args)
{
    UserCredential credential;

    using (var stream =
        new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
    {
        string credPath = System.Environment.GetFolderPath(
            System.Environment.SpecialFolder.Personal);
        credPath = Path.Combine(credPath, ".credentials/sheets.googleapis.com-dotnet-quickstart.json");

        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
        Console.WriteLine("Credential file saved to: " + credPath);
    }

    // Create Google Sheets API service.
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    string spreadsheetId = util.spreadsheetId;
    //BELOW IS STUFF THAT DOESN'T GET EXECUTED DUE TO EXCEPTION, READ ON!
}

原来如此!实际上 - 从技术上来说效果很好。但是,由于某些与测试相关的内容,我需要将util.driver切换为new FirefoxDriver()。并猜测,当我这样做时,System.TypeInitializationException行抛出异常string spreadsheetId = util.spreadsheetId;“.util类型的初始化器返回异常”。 这怎么可能呢? 此外,firefoxdriver所需的geckodriver存在于文件夹中,但控制台确实尖叫很多“远程主机返回错误:404未找到”,不知道那是什么 - PhantomJS不会发生。

1 个答案:

答案 0 :(得分:1)

System.TypeInitializationException是一个异常,它作为类初始化程序抛出的异常的包装引发。这个类不能被继承。当类初始化程序无法初始化类型时,会创建TypeInitializationException并传递对类型的类初始值设定项引发的异常的引用。如此SO post中所述,请检查您的静态参数。最常见的情况是,当static constructor无法实例化类型时,会引发TypeInitializationException异常。