Home » Software Testing » Automation Testing » Selenium WebDriver Tutorial » Email for failing Selenium Script ‘s Stack Trace to your Email Id

Email for failing Selenium Script ‘s Stack Trace to your Email Id

In this post, we would be learning how to send Email for failing Selenium Script which includes all the stack trace. For this, we would be using Java Mail API and In one of the post we have written a detailed post about uses of JavaMail API, So if you want to read the post then read it
Reading e-mail using Javamail api
1- Pre-requisite
First, we need to download two jar files
1- javaee-api-5.0.3.jar
2- javamail1_4_7.zip
download both file from here
[the_ad_placement id=”incontent”]
In this Java Mail API we use mainly two packages
1) javax.mail.internet.
2) javax.mail

In general we use three steps to send emails using JavaMail API

1- Session Object creation that stores all the information like Hostname, username and password
like this

 

2- Setting Subject and Message body like this

 

3- Sending mail that could be done with this line of code

 

[the_ad_placement id=”incontent”]

2- Now I am posting here my code of Mail sending class

 

 

I have written one class SendMail with one constructor with three parameters. that I would call in my WebDriver script. and When My code would fail somewhere then It will send the Stack Trace.

3- My script of WebDriver

 

I have tried it to send an email for failing Selenium Script. So hope you also enjoy this post . would be very happy if you share your advice to optimize this code.

 

 

23 thoughts on “Email for failing Selenium Script ‘s Stack Trace to your Email Id”

      1. Dude could you explain with last line of code like new SendMail(“Sender_Mailid”,”Receiver_Mailid”,e);

  1. Pingback: Adding add-on in Firefox and Chrome using WebDriver | Abode QA

    1. Use this information

      Outlook.com SMTP server address: smtp.live.com
      in place of “smtp.gmail.com”
      and
      Outlook.com SMTP port: 587 in place of 465.

      Use this information in the code and it will work for you !!!
      If you are trying this code for outlook.com

  2. Hi ,
    thanks for this details, but could not able to locate where exactly changes need to be required to get the test report mail..

    1. @Biswajit @Rahim
      Please look at this line of code in Except class
      new SendMail(“Sender_Mailid”,”Receiver_Mailid”,e);

      Here Suppose sender_mailid is [email protected]
      and Receiver_Mailid i am taking your email id taking as [email protected].

      So when your script will fail somewhere then stacktrace will be sent to your email id
      [email protected] and sender will be [email protected]

      and if this mail id is associated with your company website then please go to your Outlook and find the SMTP server and port so that in place of smtp.gmail.com
      you could replace with correct smtp server and port number.

      Hope I have answered you question.

  3. Can you show the whole program. I am trying to do this but having some issues. I am using the NetBeans IDE to develop the Junit4 code.

    1. I don’t think that any problem should creep in to above code.

      Above code is well tested in Eclipse IDE and all code is present in the post so please go through the above code once again or if even after that you need assistance then you may ping me any time at my skype id dwarika.dhish.mishra

      1. When I try to run the Selenium test I get an error that there is no main class. What am I doing wrong??

        1. In this case might be you are missing some annotations of Junit then other wise in presence of Junit annotation for Junit 4 or testMethod name is sufficient to run the code withough asking for main method.

          So can you share your script.

      2. Here is the selenium code:

        /*
        * To change this license header, choose License Headers in Project Properties.
        * To change this template file, choose Tools | Templates
        * and open the template in the editor.
        */

        import java.util.concurrent.TimeUnit;
        import org.junit.*;
        import static org.junit.Assert.*;
        import org.openqa.selenium.By;
        import org.openqa.selenium.WebDriver;
        import org.openqa.selenium.firefox.FirefoxDriver;

        /**
        *
        * @author jfrank1
        */
        public class Webdrivertest2Test {

        private WebDriver driver;
        private String baseUrl;
        private boolean acceptNextAlert = true;
        private StringBuffer verificationErrors = new StringBuffer();

        public Webdrivertest2Test() {
        }

        @BeforeClass
        public static void setUpClass() {
        System.out.println(“setUp”);
        Webdrivertest2 instance = new Webdrivertest2();
        instance.setUp();
        // TODO review the generated test code and remove the default call to fail.
        fail(“The test case is a prototype.”);
        }

        @AfterClass
        public static void tearDownClass() {
        System.out.println(“tearDown”);
        Webdrivertest2 instance = new Webdrivertest2();
        instance.tearDown();
        // TODO review the generated test code and remove the default call to fail.
        fail(“The test case is a prototype.”);
        }

        /**
        * Test of setUp method, of class Webdrivertest2.
        */

        @Test
        public void testWebdriverTest() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = “http://stage7.bicycling.com”;
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.get(baseUrl + “/”);
        try {
        driver.findElement(By.linkText(“Subscrib”)).click();
        }
        catch (Exception e) {
        new SendMail(“[email protected]”,”[email protected]”,”ZAD-TEST”,”testing error email”);
        }
        driver.findElement(By.linkText(“Give a Gift”)).click();
        // TODO review the generated test code and remove the default call to fail.
        fail(“The test case is a prototype.”);
        }

        Here is the email class that I add to the project. I Know this code works as standalone but cannot get my script to run in Netbeans 7.4. Not sure what I am doing wrong but it keep telling met there is no “main” class. Please understand that it has been 13 years since I coded in Java so I am VERY rusty:

        /*
        * To change this license header, choose License Headers in Project Properties.
        * To change this template file, choose Tools | Templates
        * and open the template in the editor.
        */

        /**
        *
        * @author jfrank1
        */

        import java.util.Properties;
        import javax.mail.Message;
        import javax.mail.MessagingException;
        import javax.mail.PasswordAuthentication;
        import javax.mail.Session;
        import javax.mail.Transport;
        import javax.mail.internet.InternetAddress;
        import javax.mail.internet.MimeMessage;
        import org.apache.commons.lang3.exception.ExceptionUtils;

        public class SendMail {
        public SendMail(String fromMail,String tomail, String subject, String msg )
        {
        Properties props = new Properties();
        props.put(“mail.smtp.host”, “smtp.rodale.com”);
        props.put(“mail.smtp.socketFactory.port”, “25”);
        props.put(“mail.smtp.socketFactory.class”,
        “javax.net.ssl.SSLSocketFactory”);
        props.put(“mail.smtp.auth”, “true”);
        props.put(“mail.smtp.port”, “25”);
        Session session = Session.getDefaultInstance(props,
        new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(“[email protected]”,”Annie909!”);
        }
        });
        try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(fromMail));
        message.setRecipients(Message.RecipientType.TO,
        InternetAddress.parse(tomail));
        message.setSubject(subject);
        message.setText(“your test has failed for script name: “+ msg );
        Transport.send(message);
        System.out.println(“Done”);
        } catch (MessagingException ex) {
        throw new RuntimeException(ex);
        }
        }
        }

  4. I am not sure why I cannot get it to run in NetBeans but it does work in Eclipse. Now how do you get this all put together so that you can schedule it to run at a certain time??

  5. Thank you so much for the details. However; this will send email for each failed script; How can I send single email for total failed script with failed method names ? TIA

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: