How to parse xml file in my junit selenium test case using eclipse, I want to grab data from this file and insert it in forms using my selenium RC test case.
3 Answers
Java has inbuilt machanism for dealing with XML processing. It has support for both DOM as well as SAX parsers. You may want to have a look at http://download.oracle.com/javaee/1.4/tutorial/doc/JAXPIntro.html
Comments
Take a look at dom4j, and this is my approach. I implemented a selenium + Junit framework and all the data inputs are in XML format. So I setup the structure of the xml input. So If you are going on this direction I would advise you to identify what xml format/structure.
Example:
<seleniumtest>
<!-- Selenium Test Parameters -->
<Parameter name="inputValue">
<value>myvalue</value>
</Parameter>
<Parameter name="mypassword">
<value>password</value>
</Parameter>
<Parameter name="users">
<value>user1</value>
<value>user2</value>
</Parameter>
</seleniumtest>
One you finalize on the structure you can start writing a parse and expose the data into rest of the test or just for a one test.
Here is the start for your xml parser, Create a class and have the constructor read in the xml file,
public class XMLFileParser {
private static final Logger log = Logger.getLogger(XMLFileParser.class.getName());
private Document document;
/**
* Method will construct a Document Object from the given InputStream
* @param readIn The input stream to read the document.
*/
public XMLFileParser(InputStream readIn) {
SAXReader reader = new SAXReader();
try {
document = reader.read(readIn);
}catch (DocumentException ex) {
log.error("Error when attempting to parse input data file", ex);
}
}
/**
* Write a method to iterate over the nodes to actually parse the xml file.
*/
public HashMap<String, Object> parseInput(HashMap<String, Object> params) {
Element rootElement = document.getRootElement();
for(Iterator iter = rootElement.elementIterator("Parameter"); iter.hasNext();) {
// This where you should write your parse logic,
}
return params;
}
It doesn't have to be a hashmap but thats what I wanted to do you can make this method to return anything that you wish based on your framework.
Have Fun;