Selenium医院应用新增设施验证时出现ClassCastException问题求助
解决JSON类型转换异常:JSONArray无法转为JSONObject
嘿,我来帮你搞定这个ClassCastException的问题!这个异常的核心原因很明确:你解析的JSON文件根节点是一个JSON数组(JSONArray),但你在代码里强行把它转换成了JSON对象(JSONObject),这就导致了类型不匹配的错误。
问题分析
你用org.json.simple.JSONParser解析JSON文件后,得到的obj实际上是JSONArray类型,但代码里却写了:
JSONObject jsonObject = (JSONObject) obj;
这就触发了java.lang.ClassCastException,因为JSONArray和JSONObject是两个完全不同的类型,不能直接强制转换。
解决方案
首先你需要确认你的AddNewFacilityDetailsSection.json文件的结构,它应该是类似这样的数组格式(根节点是[]):
[ { "Selenium-Facility": "测试设施名称", "Test Facility created by Selenium": "这是Selenium创建的测试设施描述" } ]
接下来修改你的验证方法,先把解析结果转成JSONArray,再从中取出对应的JSONObject:
public void verifyNewFacility2() throws FileNotFoundException, IOException, ParseException { String Name, Description; JSONParser parser = new JSONParser(); Object obj = parser.parse(new FileReader("C:\\selenium-protect\\src\\test\\resources\\scripts\\Facility\\AddNewFacilityDetailsSection.json")); // 第一步:把解析结果转为JSONArray JSONArray jsonArray = (JSONArray) obj; // 第二步:从数组中获取第一个JSONObject(如果数组里只有一条数据) JSONObject jsonObject = (JSONObject) jsonArray.get(0); // 注意:确保JSON文件里的键名和这里的get参数完全一致 Name = (String) jsonObject.get("Selenium-Facility"); Description = (String) jsonObject.get("Test Facility created by Selenium"); WebElement nameElement = driver.findElement(By.xpath("//div[@class='col-12']//following::div[1]//following::h3")); String message = nameElement.getText(); Assert.assertEquals(message, Name); WebElement descriptionElement = driver.findElement(By.xpath("//div[@class='col-12']//following::div[1]//following::p")); String message1 = descriptionElement.getText(); Assert.assertEquals(message1, Description); }
额外提醒
- 如果你JSON文件的根节点本来应该是
JSONObject(根节点是{}),那你需要检查JSON文件的格式是否正确,有没有多余的方括号。 - 确保
get()方法里的键名和JSON文件中的键完全一致,包括大小写、空格,否则会返回null导致后续断言失败。
内容的提问来源于stack exchange,提问作者sunil nair
相关产品推荐
相关产品推荐

