package org.sky.auto.xml; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.openqa.selenium.WebElement; import org.sky.auto.base.AutoBase; import org.sky.auto.element.SElement; import org.sky.auto.window.Window; public class XmlProvider{ static Logger logger = Logger.getLogger(XmlProvider.class); private String path; public WebElement element(String id ,String path){ XMLDocument xd = new XMLDocument(path); XMLElements xe = new XMLElements(xd); //XMLNode xn = xe.getXMLNode(id); XMLElement xn = xe.getXMLElementOfAll(id); return elementById(xn, id); } public synchronized List<WebElement> elements(String id,String path){ XMLDocument xd = new XMLDocument(path); XMLElements xe = new XMLElements(xd); XMLElement xn =xe.getXMLElementOfAll(id); return elementsById(xn, id); } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public SElement sElement(String id,String path){ SElement se= new SElement(element(id,path)); se.setId(id); return se; } public List<SElement> sElements(String id,String path){ List<SElement> slist =new ArrayList<SElement>(); for(WebElement we:elements(id,path)){ SElement se=new SElement(we); se.setId(id); slist.add(se); } return slist; } public WebElement elementById(XMLElement xn,String id){ Window.selectDefaultWindow(); WebElement we=null; XmlToJavaTools xtj = new XmlToJavaTools(); if(xn==null){ try { throw new Exception("查找元素["+id+"]的时候出现错误!没有找到正确的元素!"); } catch (Exception e) { e.printStackTrace(); } } if(xn.getElement().getParent().isRootElement()){ int index =0; if(xn.getIndex()!=null){ index = Integer.parseInt(xn.getIndex()); try{ index=Integer.parseInt(xn.getIndex()); }catch(NumberFormatException e1){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e1.printStackTrace(); } } try { we=AutoBase.driver().findElements(xtj.locator(xn.getBy(), xn.getValue())).get(index); } catch (Exception e) { logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } if(((XMLElement) xn).getXMLChildElements().size()!=0){ for(XMLChildElement xc : ((XMLElement)xn).getXMLChildElements()){ int cindex=0; if(xc.getIndex()!=null){ try{ cindex=Integer.parseInt(xc.getIndex()); }catch(NumberFormatException e1){ logger.error("child元素["+xc.getValue()+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e1.printStackTrace(); } } try{ we=we.findElements(xtj.locator(xc.getBy(), xc.getValue())).get(cindex); }catch(Exception e){ logger.error("定位元素["+id+"]的child元素的时候,出现错误!"); } } } }else{ XMLFrame xf = new XMLFrame(); xf.setElement(xn.getElement().getParent()); int pindex=0; if(xf.getIndex()!=null){ try{ pindex=Integer.parseInt(xf.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try{ Window.selectFrame(AutoBase.driver().findElements(xtj.locator(xf.getBy(), xf.getValue())).get(pindex)); }catch(Exception e){ logger.error("定位元素["+id+"]的时候,出现错误!进行切换frame的时候定位出错!"); e.printStackTrace(); } int index=0; if(xf.getIndex()!=null){ try{ index=Integer.parseInt(xf.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try{ we=AutoBase.driver().findElements(xtj.locator(xn.getBy(), xn.getValue())).get(index); }catch(Exception e){ logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } if(xn.getXMLChildElements().size()!=0){ for(XMLChildElement xce:xn.getXMLChildElements()){ int cindex=0; if(xce.getIndex()!=null){ try{ cindex=Integer.parseInt(xce.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try{ we=we.findElements(xtj.locator(xce.getBy(), xce.getValue())).get(cindex); //Window.selectDefaultWindow(); }catch(Exception e){ logger.error("定位元素["+id+"]的child元素"+xce.getValue()+"的时候,出现错误!"); e.printStackTrace(); } } } } return we; } public List<WebElement> elementsById(XMLElement xn,String id){ WebElement we=null; XmlToJavaTools xtj = new XmlToJavaTools(); if(xn.getElement().getParent().getName().equals("list")){ Window.selectDefaultWindow(); if(xn.getXMLChildElements().size()==0){ try { return AutoBase.driver().findElements(xtj.locator(xn.getBy(), xn.getValue())); } catch (Exception e) { logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } }else{ int index = 0; if(xn.getIndex()!=null){ try{ index=Integer.parseInt(xn.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try { we=AutoBase.driver().findElements(xtj.locator(xn.getBy(), xn.getValue())).get(index); } catch (Exception e) { logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } for(int i=0;i<xn.getXMLChildElements().size();i++){ if(i==xn.getXMLChildElements().size()-1){ XMLChildElement xce = xn.getXMLChildElements().get(i); try { return we.findElements(xtj.locator(xce.getBy(), xce.getValue())); } catch (Exception e) { logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } }else{ int cindex =0; XMLChildElement xce = xn.getXMLChildElements().get(i); if(xce.getIndex()!=null){ try{ index=Integer.parseInt(xn.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try{ we=we.findElements(xtj.locator(xce.getBy(), xce.getValue())).get(cindex); }catch(Exception e){ logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } } } } } else if(xn.getElement().getParent().getName().equals("frame")){ Window.selectDefaultWindow(); int pindex = 0; XMLFrame xf = new XMLFrame(); xf.setElement(xn.getElement().getParent()); if(xf.getIndex()!=null){ try{ pindex=Integer.parseInt(xn.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try{ Window.selectFrame(AutoBase.driver().findElements(xtj.locator(xf.getBy(), xf.getValue())).get(pindex)); }catch(Exception e){ logger.error("定位元素["+id+"]的时候,出现错误!进行切换frame的时候定位出错!"); e.printStackTrace(); } if(xn.getXMLChildElements().size()==0){ try { return AutoBase.driver().findElements(xtj.locator(xn.getBy(), xn.getValue())); } catch (Exception e) { logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } }else{ int index = 0; if(xn.getIndex()!=null){ try{ index=Integer.parseInt(xn.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try { we=AutoBase.driver().findElements(xtj.locator(xn.getBy(), xn.getValue())).get(index); } catch (Exception e) { logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } for(int i=0;i<xn.getXMLChildElements().size();i++){ if(i==xn.getXMLChildElements().size()-1){ XMLChildElement xce = xn.getXMLChildElements().get(i); try { return we.findElements(xtj.locator(xce.getBy(), xce.getValue())); } catch (Exception e) { logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } }else{ int cindex =0; XMLChildElement xce = xn.getXMLChildElements().get(i); if(xce.getIndex()!=null){ try{ index=Integer.parseInt(xn.getIndex()); }catch(NumberFormatException e){ logger.error("元素["+id+"]的index值不能够被转化成为int类型,index的属性值输入错误!"); e.printStackTrace(); } } try{ we=we.findElements(xtj.locator(xce.getBy(), xce.getValue())).get(cindex); }catch(Exception e){ logger.error("定位元素["+id+"]的时候,出现错误!"); e.printStackTrace(); } } } } } return null; } public WebElement element(String id){ XMLLoader.load("xml"); return elementById(XMLLoader.getXMLElement(id),id); } public List<WebElement> elements(String id){ XMLLoader.load("xml"); return elementsById(XMLLoader.getXMLElement(id),id); } }