我们也可以用xml来定义一个信息更为丰富的UIMap.xml文件,比如,额外还添加控件所属的页,控件的类型,然后解析构建一个XMLParser类来读取相应的值。
1 <?xml version="1.0" encoding="utf-8" ?> 2 <UIMap> 3 <Object ID="User Name"> 4 <Attributes Locator="userName" Page="Main Page" Type="Button"/> 5 </Object> 6 7 <Object ID="Password"> 8 <Attributes Locator="Password" Page="Main Page" Type="Button"/> 9 </Object> 10 </UIMap>
相应的解析xml的代码:
1 public static String getLocator(String locatorID){ 2 InputStream ins=Thread.currentThread().getContextClassLoader() 3 .getResourceAsStream(FileConstants.XMLFILE_NAME); 4 if(ins==null){ 5 System.out.println("Missing UIMap.xml file."); 6 return null; 7 } 8 9 DocumentBuilderFactory fac=DocumentBuilderFactory.newInstance(); 10 DocumentBuilder builder=null; 11 try { 12 builder = fac.newDocumentBuilder(); 13 } catch (ParserConfigurationException pce) { 14 System.out.println("Failing to new DocumentBuilder for runtime exception."); 15 throw new RuntimeException(pce); 16 } 17 18 Document xmlDoc=null; 19 try { 20 xmlDoc = builder.parse(ins); 21 } catch (SAXException se) { 22 System.out.println("Failing to parse xml file for runtime exception."); 23 throw new RuntimeException(se); 24 } catch (IOException ie) { 25 System.out.println("Failing to parse xml file for runtime exception."); 26 throw new RuntimeException(ie); 27 } 28 29 XPathFactory pathFac=XPathFactory.newInstance(); 30 XPath xpath = pathFac.newXPath(); 31 32 XPathExpression exp=null; 33 try { 34 exp = xpath.compile("UIMap/Object[@ID='"+locatorID+"']/Attributes"); 35 } catch (XPathExpressionException e) { 36 System.out.println("Failing to get locator for :"+locatorID); 37 } 38 Node node=null; 39 try { 40 node = (Node)exp.evaluate(xmlDoc, XPathConstants.NODE); 41 } catch (XPathExpressionException e) { 42 43 e.printStackTrace(); 44 }finally{ 45 try{ 46 if(ins!=null){ 47 ins.close(); 48 } 49 }catch(Exception ex){ 50 System.out.println("Failing to load UIMap.xml for runtime exception."); 51 throw new RuntimeException(ex); 52 } 53 } 54 55 return node.getAttributes().getNamedItem("Locator").getNodeValue(); 56 }
测试代码:
1 selenium.type(UIMapParser.getLocator("UserName"), "seleniumtest"); 2 selenium.type(UIMapParser.getLocator("Password"), "seleniumtest");