Reading from XML to trigger a Selenium driver

xml:

<?xml version="1.0"?>
<TestData>
<mailserver-name>
<service>http://www.gmail.com</service>
</mailserver-name>
<user-details>
<email-id>bijoy.meethal@gmail.com</email-id>
<password>1676M##T#$@*&%H@L</password>
<folder>inbox</folder>
</user-details>
</TestData>

Java code:

/*
* @ Author : Bijoy Meethal
* @ Description : A simple program to read XML and retrieve data to manipulate Selenium webdriver
* @ Date : 1/26/2012
*/
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.*;
import org.w3c.dom.*;

public class GmailXMLTest {

public static void main(String argv[]) {

try {
File file = new File("C:\\TestData.xml"); //file location should be specified correctly
// Prepare XML
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);
document.getDocumentElement().normalize();
System.out.println("Debug: Root element"+ document.getDocumentElement().getNodeName());
NodeList node = document.getElementsByTagName("TestData");
System.out.println("TestData Details");
System.out.println("________________________________________________");

//Read XML to get test data

for (int i = 0; i < node.getLength(); i++) {
Node currentNode = node.item(i);

if (currentNode.getNodeType() == Node.ELEMENT_NODE) {

Element element = (Element) currentNode;
NodeList mailServerElemntList = element.getElementsByTagName("service");
Element mailServer = (Element) mailServerElemntList.item(0);
NodeList mailServer1 = mailServer.getChildNodes();
String Service = ((Node)mailServer1.item(0)).getNodeValue();
System.out.println("Mail Servername:"+ Service);

NodeList emailNodeElementList = element.getElementsByTagName("email-id");
Element emailNodeElement = (Element)emailNodeElementList.item(0);
NodeList details = emailNodeElement.getChildNodes();
String emailAddress=((Node) details.item(0)).getNodeValue();
System.out.println("email :" + emailAddress);

NodeList passwordNodeElementList = element.getElementsByTagName("password");
Element passwordNodeElement = (Element) passwordNodeElementList.item(0);
NodeList address = passwordNodeElement.getChildNodes();
String passCode = ((Node) address.item(0)).getNodeValue();
System.out.println("Password : "+passCode);

NodeList destFolder = element.getElementsByTagName("folder");
Element destElement = (Element) destFolder.item(0);
NodeList city = destElement.getChildNodes();
String destnFolder = ((Node) city.item(0)).getNodeValue();
System.out.println("Folder : " + destnFolder);

FirefoxDriver wd = new FirefoxDriver();
wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
wd.get(Service);
wd.findElement(By.id("Email")).sendKeys(emailAddress);
wd.findElement(By.id("Passwd")).sendKeys(passCode);
wd.findElement(By.id("signIn")).click();
Thread.sleep(8000);
System.out.println(wd.getTitle());
System.out.println(wd.getCurrentUrl());
if (!wd.getCurrentUrl().equals("https://mail.google.com/mail/?shva=1#inbox")) {
wd.close();
System.out.println("Failed to navigate to inbox");
throw new RuntimeException("assertTitle failed");
}
System.out.println("Test Completed - login passed and navigated to inbox");
wd.close();

}
}}
catch (Exception e) {e.printStackTrace();}
}
}

Comments

  1. How to give more than one email address and password in XML??
    So that test will work like.. fisrt type email & password then logout then type next email & password.....

    ReplyDelete
  2. you may create XML children tags

    example:

    abc@d.com
    cde@f.com
    ----
    ----


    same for and loop in an array

    ReplyDelete
  3. it is excellent provied me too basic idea

    ReplyDelete
  4. Hi ,

    following error is displayed when i run code using selenium webdriver

    [Fatal Error] TestData.xml:1:1: Content is not allowed in prolog.
    org.xml.sax.SAXParseException; systemId: file:/D:/Selenium/TestData.xml; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at laogin.GmailXMLTest.main(GmailXMLTest.java:20)

    ReplyDelete
  5. remove the spl chars in password in the xml (##T#$@*&%H@L)

    ReplyDelete
  6. How do I make this a reusable method ?

    XMLMethodParser.java - This is where I would write the method to parse, read file and use it in the Test
    XMLParserTest.XML - This is where all the XML datas are

    XMLParserTest.java - This is where I would use the method from XMLMethodParser.java and use the XMLParserTest.XML

    ReplyDelete
  7. Hi ,

    following error is displayed when am trying to run code using selenium webdriver

    [Fatal Error] advanced.xml:2:6: The processing instruction target matching "[xX][mM][lL]" is not allowed.
    org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at swathi.GmailXMLTest.main(GmailXMLTest.java:21)


    ReplyDelete
  8. Hi,
    Can anyone help me out to read the XML tag values using java selenium webdriver from the .xml file which is generated dynamically by the application.

    ReplyDelete
  9. how we pass it to dataprovider ?
    my means is that how to pass XML data file to dataprovider and after it how pass to any test using testNG.
    Please help........

    ReplyDelete

Post a Comment

Popular Posts