簡體   English   中英

使用Selenium Webdriver在Java中讀取JSON文件並寫入JSON文件

[英]Reading JSON file and Writing into a JSON file in Java using selenium Webdriver

我正在開發一個自動化框架,並且正在尋找excel的替代品來存儲測試數據,元素定位符和頁面對象。

因此,我的一位從事自動化工作的朋友正在使用json文件存儲所有數據,因為它易於讀取和寫入數據,而且速度更快,而且易於維護。 他們使用紅寶石作為語言。

所以我想知道我們是否可以使用java和selenium來做到這一點?

我已經在Google上搜索了它,看起來好像有一個來自Google的名為“ gson”的庫,但是沒有一個庫顯示如何使用硒來使用它。

請分享您對此的想法。

謝謝!!

我不能說在JSON文件中包含元素定位符,因為我遵循頁面對象模型並將所有那些元素包含在java類中。 但是,從JSON文件讀取測試數據非常容易。 自從我搞混以來已經有一段時間了,但是我使用了JSON Simple (我仍然使用它來生成JSON對象/文件),並且做了類似的事情來讀取文件:

protected JSONObject getDataFile(String dataFileName) {
    String dataFilePath = "src/test/resources/";
    JSONObject testObject = null; 

    try {
        FileReader reader = new FileReader(dataFilePath + dataFileName);                        
        JSONParser jsonParser = new JSONParser();
        JSONObject jsonObject = (JSONObject) jsonParser.parse(reader);
        testObject = (JSONObject) jsonObject;
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return testObject;
}

有了JSON對象后,JSON simple提供了幾種與之交互並獲取值的不同方法。 我和Gson玩了一段時間,我認為那是非常相似的。

我不知道您的數據文件的結構/結構如何,但是我有一個表示測試用例名稱的鍵字符串,值是一個json對象,其中包含具有實際數據的其他鍵-值對,數據發送到TestNG數據提供程序。 如果那與您的設置相似,我可以共享該代碼。

編輯:這是@DataProvider使用的方法

public Object[][] getTestScenarios(String dataFileName, String testCaseName) {
    JSONArray testCase = (JSONArray) getDataFile(dataFileName).get(testCaseName);
    List<JSONObject> testScenarioArray = new ArrayList<JSONObject>();

    for (int i = 0; i < testCase.size(); i++) {
         testScenarioArray.add((JSONObject) testCase.get(i));
    }

    Object[][] dataProviderArray = new Object[testScenarioArray.size()][];
    for (int scenario = 0; scenario < testScenarioArray.size(); scenario++) {
        String scenarioName = null;

        if ((String) testScenarioArray.get(scenario).get("scenario") != null) {
            scenarioName = (String) testScenarioArray.get(scenario).get("scenario");
        } else {
            scenarioName = "No scenario name specified";
        };
        dataProviderArray[scenario] = new Object[] { scenarioName, (JSONObject) testScenarioArray.get(scenario) };
    }
    return dataProviderArray;
}

方案名稱的內容可以刪除,因為如果我記得正確的話,我相信我僅將其用於記錄或報告。 我將其作為JSONArray並以這種方式進行編碼的原因是,一個測試用例可以具有一個數組,其中包含具有不同數據的多個方案。 不想測試必須關心有多少種情況。

我已經從數據庫中讀取了一個JSON數組,並從JSON Array中列出了一個JSON對象。

該數組如下所示:

[{
    "index": "data",
    "type": "message",
    "sum": 
    {
        "message": "HELLO",
    },
}, {
    "index": "data",
    "type": "message",
    "sum":
    {
        "message": "HELLO123",
    }
}]

它以STRING形式從DB收集,但是由於具有SQUARE [{Json1}, {Json2}][{Json1}, {Json2}]而成為數組。

String data = "ArrayFromDB";
JSONArray jsonArr = new JSONArray(data);
List<String> listJSON = new ArrayList<String>();

for (int i = 0; i < jsonArr.length(); i++)
{
    listSMSJSON.add(jsonArr.getJSONObject(i).getJSONObject("sum").getString("message"));
}

System.out.println(listJSON);

listJSON打印為[HELLO, HELLO123]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM