package data; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import org.testng.AssertJUnit; import org.testng.annotations.DataProvider; import com.bj58.qa.atf.data.BaseINIData; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /** * 数据驱动类范例 */ public class MyDataProvider extends BaseINIData{ public static final String DeletePatten="*del*"; //从文本文件中获得数据 @DataProvider(name="json") public static Object[][] jsonData(Method m) { // System.out.println(getDataFileName(m)+" "+m.getName()); Object[][] dataBlock =new BaseINIData().readBlockFromDataFile(getDataFileName(m),m.getName(), true); if(dataBlock==null){ return null; } String jsonString = (String)dataBlock[0][0]; JSONObject jsonObject=null; JSONArray jsonArray=null; try { //System.out.println(jsonString); jsonObject = new JSONObject(jsonString); } catch (JSONException e) { // e.printStackTrace(); try { jsonArray = new JSONArray(jsonString); } catch (JSONException e1) { e1.printStackTrace(); AssertJUnit.fail("传入数据错误!"+jsonString); } } //传入一组数据 if(jsonObject!=null){ Object[][] result = new Object[1][1]; String[] fields=JSONObject.getNames(jsonObject); Map<String,String>paramMap= new HashMap<String,String>(); for(String field:fields){ String value=""; try { value=jsonObject.getString(field); } catch (JSONException e) { e.printStackTrace(); AssertJUnit.fail("传入数据错误!"+field); } paramMap.put(field, value); } result[0][0]=paramMap; return result; } //传入多组数据 if(jsonArray!=null){ int length= jsonArray.length(); Object[][] result = new Object[length][1]; Map<String,String> paramMap= new HashMap<String,String>(); for(int i=0;i<length;i++){ JSONObject jo=null; Map<String,String> tempParamMap= copyMap(paramMap); try { jo = (JSONObject) jsonArray.get(i); } catch (JSONException e) { e.printStackTrace(); AssertJUnit.fail("传入数据错误!"+jsonArray.toString()); } String[] fields=JSONObject.getNames(jo); for(String field:fields){ String value=""; try { value=jo.getString(field); } catch (JSONException e) { e.printStackTrace(); AssertJUnit.fail("传入数据错误!"+field); } if(DeletePatten.equals(value)){ tempParamMap.remove(field); }else{ tempParamMap.put(field, value); } } result[i][0]=tempParamMap; paramMap = copyMap(tempParamMap); } return result; } return new Object[1][1]; } private static String getDataFileName(Method m){ String className = m.getDeclaringClass().getName(); int lastDotPosition = className.lastIndexOf('.'); className = className.substring(lastDotPosition+1); String fileName = className.replace("Test", "Data"); fileName+=".json"; return fileName; } private static Map<String,String> copyMap(Map<String,String> sourceMap){ Map<String,String> tempMap = new HashMap<String,String>(); for(String key:sourceMap.keySet()){ tempMap.put(key, sourceMap.get(key)); } return tempMap; } }
相关推荐
myDataProvider.pageCount = totalPageCount; myDataProvider.pageSize = itemsPerPage; ``` 3. **加载外部库的jar文件** 在WEB-INF/lib目录下的jar文件需要在Flex应用中进行加载。这通常在Flex项目的Build ...
<Tree id="myTree" dataProvider="{myDataProvider}" itemClick="handleItemClick(event)" /> ``` 在ActionScript中,可以这样创建: ```actionscript var myTree:Tree = new Tree(); myTree.dataProvider = ...
<mx:DataGrid id="myDataGrid" dataProvider="{myDataProvider}"> 列1" dataField="field1" itemRenderer="com.mycompany.CustomCellRenderer"/> <!-- 更多列配置... --> ``` 3. 数据提供程序 确保你的数据...
<mx:Tree id="tree" dataProvider="{myDataProvider}" click="onTreeClick(event)"/> ``` 2. 创建iFrame组件:然后,添加一个IFrame组件到界面中,并设置初始源为空或者默认网页。 ```xml ``` 3. 监听Tree点击...
这里的`myDataProvider`是一个ArrayCollection或其他数据提供者,其中包含了列表项的数据。 接下来,我们讨论标签"FLEX 带复选框LIST"。这个标签表明了此示例专注于Flex框架,特别是涉及列表和复选框功能的使用。在...
<mx:AdvancedDataGrid id="myGrid" dataProvider="{myDataProvider}"> ``` 4. **设置合并属性** 要启用单元格合并,我们需要在AdvancedDataGrid的列定义中设置`header间隙`(headerGap)和`row间隙`(rowGap)为0...
<mx:List dataProvider="{myDataProvider}"> ``` 在这个例子中,我们定义了一个内联的`IconItemRenderer`,它不仅显示了数据的文本(`<s:Label>`),还通过`iconFunction`展示了对应的图标。`...
list.dataProvider = myDataProvider; list.itemRenderer = MyItemRenderer2; ``` 在描述中提到的“效果一样”可能意味着`MyItemRenderer2`实现了与前一个示例类似的功能,但具体实现细节未给出。通常,这可能涉及...
myDataProvider.addItem(newData); ``` 3. **通知AdvancedDataGrid**:数据提供者添加了新数据后,需要通知AdvancedDataGrid进行更新。这可以通过调用`refresh()`方法完成。 ```actionscript myDataGrid.data...
<mx:DataGrid dataProvider="{myDataProvider}"> 操作" itemRenderer="com.mycompany.ButtonRenderer"/> <!-- 其他列配置 --> ``` 五、事件处理和通信 插入子组件后,我们还需要处理这些组件的事件。例如,...
<List id="albumList" dataProvider="{myDataProvider}"> ``` 在这里,`local:AlbumItemRenderer`是我们的自定义ItemRenderer类。 此外,我们还需要处理数据绑定和事件响应。数据绑定允许我们在...
例如,如果Library有一个数据类`MyData`,可以创建一个`MyDataProvider`接口,让Library实现这个接口,然后在主项目中通过接口访问数据。 2. 布局:Library中的布局可以直接在主项目中使用。在主项目的布局XML文件...
<mx:AdvancedDataGrid dataProvider="{myDataProvider}"> ``` 在上述代码中,我们设置了`category`字段作为分组依据,创建了一个名为“Category”的表头分组。 4. **自定义表头分组行为**:...
<s:List dataProvider="{myDataProvider}"> ``` 7. **优化和性能**: 为了提高性能,ItemRenderer应尽可能轻量级。避免在ItemRenderer中包含复杂的布局或过多的计算,因为它们会影响列表滚动的平滑...
<Admin dataProvider={myDataProvider}> ); ``` 其中`todoList`是待办事项列表组件。 4. **创建列表组件**:`TodoList`组件将渲染待办事项列表。这里,你可以定义字段显示、排序、过滤等选项。例如: ```...