You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium C#中使用JSON文件实现测试数据驱动登录自动化的问题求助

解决Selenium C#中从JSON读取登录凭证的编译错误

核心问题分析

  1. JSON格式无效:login.json包含两个独立的顶级JSON对象,不符合JSON语法规范(JSON只能有一个顶级元素),同时键名不统一(Username1、Username2),导致无法正确解析。
  2. 类型不匹配:登录方法中用List<string>接收用户名,但SendKeys方法需要传入string类型,直接传递列表触发编译错误;且Password变量未从JSON中获取值。
  3. 缺少字符串读取方法:CredentialReader类仅提供整数和数组的读取方法,没有读取单个字符串的方法,无法直接获取用户名、密码这类单值数据。

分步解决方案

1. 修正JSON文件结构

将多组登录凭证改为JSON数组结构,统一键名,确保格式合法:

[
    {
        "Username": "Test_PM",
        "Password": "Password123"
    },
    {
        "Username": "Test_Viewing",
        "Password": "Password123"
    }
]

2. 扩展CredentialReader类

添加读取单个字符串的方法,以及读取多组登录凭证的方法(需引入Newtonsoft.Json库):

using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class CredentialReader
{
    public static string GetProjectRootDirectory()
    {
        string currentDirectory = Directory.GetCurrentDirectory();
        return currentDirectory.Split("bin")[0];
    }

    private static JObject GetTestDataJsonObject()
    {
        string path = Path.Combine(GetProjectRootDirectory(), "TestData", "login.json");
        JObject jObject = JObject.Parse(File.ReadAllText(path));
        return jObject;
    }

    public static int GetTestDataInt(string label)
    {
        var jObject = GetTestDataJsonObject();
        return int.Parse(jObject[label].ToString());
    }

    public static List<string> GetTestDataArray(string label)
    {
        var jObject = GetTestDataJsonObject();
        return jObject[label].ToObject<List<string>>();
    }

    // 新增:读取单个字符串
    public static string GetTestDataString(string label)
    {
        var jObject = GetTestDataJsonObject();
        return jObject[label]?.ToString() ?? string.Empty;
    }

    // 新增:读取多组登录凭证(配合修正后的JSON数组)
    public static List<LoginCredential> GetLoginCredentials()
    {
        string path = Path.Combine(GetProjectRootDirectory(), "TestData", "login.json");
        string jsonContent = File.ReadAllText(path);
        return JsonConvert.DeserializeObject<List<LoginCredential>>(jsonContent);
    }
}

// 新增:登录凭证实体类
public class LoginCredential
{
    public string Username { get; set; }
    public string Password { get; set; }
}

3. 修改登录方法

根据需求选择单凭证或多凭证读取方式,确保类型匹配:

internal void EnterLoginDetails()
{
    // 方式1:读取单组凭证(若JSON改为单对象结构)
    // string username = CredentialReader.GetTestDataString("Username");
    // string password = CredentialReader.GetTestDataString("Password");

    // 方式2:读取多组凭证,取第一组示例
    var loginCredentials = CredentialReader.GetLoginCredentials();
    string username = loginCredentials[0].Username;
    string password = loginCredentials[0].Password;

    txtUserName.SendKeys(username);
    txtPassword.SendKeys(password);
    btnLogin.Click();
}

内容的提问来源于stack exchange,提问作者majasmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:53:10