Friday, May 20, 2016

Read Emails From Inbox Using Java?


Outlook Settings:

The following settings are the official POP, IMAP and SMTP settings provided by Microsoft for Office 365. You can find these settings in the following locations:

1. In the Outlook Web App, go to Settings.

2. In the Search box at the top, type "POP and IMAP"

3. Click the Sync Email tab on the left-hand menu to edit the POP and IMAP settings.

Gmail Settings:

Check that IMAP is turned on

  1. On your computer, open Gmail.
  2. In the top right, click Settings See all  settings.
  3. Click the Forwarding and POP/IMAP tab.
  4. In the "IMAP access" section, select Enable IMAP.
  5. Click Save Changes.

POP settings

Server name: outlook.office365.com
Port: 995
Encryption method: SSL

Server name: pop.gmail.com
Port: 995
Encryption method: SSL

IMAP settings

Server name: outlook.office365.com
Port: 993
Encryption method: SSL

Server name: imap.gmail.com
Port: 993
Encryption method: SSL

SMTP settings

Server name: smtp.office365.com
Port: 587
Encryption method: TLS or STARTTLS

Server name: smtp.gmail.com
Port SSL: 465
Port for TLS/STARTTLS: 587

 

import java.io.IOException;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMessage.RecipientType;

public class GmailMailVerification {

private static String user = xyz@gmail.com;
private static String password = "abcd";
final static int MAX_MESSAGES = 10;

public static void main(String argv[]) {
//Read username and password from argments
for (int optind = 0; optind < argv.length; optind++) {
if (argv[optind].equals("-U")) {
user = argv[++optind];
} else if (argv[optind].equals("-P")) {
password = argv[++optind];
}
}

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");

try {
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", user, password);
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);

System.out.println("Total messages = " + inbox.getMessageCount());
System.out.println("New messages = " + inbox.getNewMessageCount());
System.out.println("Unread messages = " + inbox.getUnreadMessageCount());
System.out.println("Deleted messages = " + inbox.getDeletedMessageCount());

// Get the last 10 messages
int end = inbox.getMessageCount();
int start = end - MAX_MESSAGES + 1;
Message messages[] = inbox.getMessages(start, end);

// Reverse the ordering so that the latest comes out first
Message messageReverse[] = reverseMessageOrder(messages);

// Print the messages out
System.out.println("message size = " + messages.length);
int i = 0;
for (Message message : messageReverse) {
i++;
dumpMessage(i, message);
}
} catch (NoSuchProviderException e) {
e.printStackTrace();
System.exit(1);
} catch (MessagingException e) {
e.printStackTrace();
System.exit(2);
}
}

/*
* reverse the order of the messages
*/
private static Message[] reverseMessageOrder(Message[] messages) {
Message revMessages[] = new Message[messages.length];
int i = messages.length - 1;
for (int j = 0; j < messages.length; j++, i--) {
revMessages[i] = messages[j];
}
return revMessages;
}

private static void dumpMessage(int i, Message message) throws MessagingException {
System.out.println(i + " Message envelope");
System.out.println("------------------");

// FROM
for (Address address : message.getFrom()) {
System.out.println("FROM: " + address.toString());
}

// TO
for (Address address : message.getRecipients(RecipientType.TO)) {
System.out.println("To: " + address.toString());
}

// SUBJECT
System.out.println("Subject: " + message.getSubject());

// BODY MESSAGE
try {
String content = message.getContent().toString();
System.out.println("Body Message: " + content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
---------------------------- OR ----------------------

String host = "pop.gmail.com";
String port = "995";
String userName = "xxxx@gmail.com";
String password = "xxxx";
boolean isconnected = false;
Store store = null;
Folder inbox;
Message[] messages;

/**
* Connect to mail client
* @param host
* @param port
* @param userName
* @param password
* @return
*/
public boolean getConnection(String host, String port, String userName, String password) {
Properties properties = new Properties();

// ---------- Server Setting---------------
properties.put("mail.pop3.host", host);
properties.put("mail.pop3.port", port);
properties.put("mail.smtp.ssl.enable", "true");

// ---------- SSL setting------------------
properties.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.pop3.socketFactory.fallback", "false");
properties.setProperty("mail.pop3.socketFactory.port", String.valueOf(port));
Session session = Session.getDefaultInstance(properties);
if (!isconnected) {
try {
// Get the POP3 store provider and connect to the store.
store = session.getStore("pop3");
store.connect(userName, password);
isconnected = true;
// opens the inbox folder
System.out.println("Getting INBOX..");
inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
System.out.println("Connected to mail client: " + isconnected);
System.out.println("Connected to mail via " + host);
} catch (Exception e) {
e.printStackTrace();
}
}
return isconnected;

}

public String getSubject() {
String subject = "";
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}

// fetches new messages from server
messages = inbox.getMessages();
System.out.println("You have " + messages.length + " mails in your INBOX");

int i = messages.length - 1;
Message message = messages[i];
subject = message.getSubject();
System.out.println("Mail Subject: " + subject);
} catch (Exception e) {
e.printStackTrace();
}
return subject;
}

public String getBodyContent() {
String messageContent = "";
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}
messages = inbox.getMessages();

int i = messages.length - 1;
Message message = messages[i];

String contentType = message.getContentType();

if (contentType.contains("multipart")) {
// content may contain attachments
Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
messageContent = getText(message);
} else {
// this part for the message content
messageContent = part.getContent().toString();
}
}
} else if (contentType.contains("text/plain") || contentType.contains("text/html")) {
Object content = message.getContent();
if (content != null) {
messageContent = content.toString();
}
}

} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Mail Body Message: " + messageContent);
return messageContent;
}

public String getAttachmentFileName() {
String fileName = "";
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}
messages = inbox.getMessages();
int i = messages.length - 1;
Message message = messages[i];

String contentType = message.getContentType();

if (contentType.contains("multipart")) {
// content may contain attachments
Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
// this part is attachment
fileName = part.getFileName();
}

}
}

} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Attachment File Name: " + fileName);
return fileName;
}

public static String getText(Part p) {
try {

if (p.isMimeType("text/*")) {
String s = (String) p.getContent();
return s;
}

if (p.isMimeType("multipart/alternative")) {
// prefer html text over plain text
Multipart mp = (Multipart) p.getContent();
String text = null;
for (int i = 0; i < mp.getCount(); i++) {
Part bp = mp.getBodyPart(i);
if (bp.isMimeType("text/plain")) {
if (text == null)
text = getText(bp);
continue;
} else if (bp.isMimeType("text/html")) {
String s = getText(bp);
if (s != null)
return s;
} else {
return getText(bp);
}
}
return text;
} else if (p.isMimeType("multipart/*")) {
Multipart mp = (Multipart) p.getContent();
for (int i = 0; i < mp.getCount(); i++) {
String s = getText(mp.getBodyPart(i));
if (s != null)
return s;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

public void deleteEmails() throws Exception {
try {
if (!isconnected) {
getConnection(host, port, userName, password);
}
messages = inbox.getMessages();
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
message.setFlag(Flags.Flag.DELETED, true);
}
inbox.close(true);
store.close();
System.out.println("deleted mail");
} catch (Exception e) {
e.printStackTrace();
}
}

public void closeMailConnections() throws MessagingException {
if (null != inbox && null != store) {
try {
inbox.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Monday, May 16, 2016

Verifying ToolTip information by enabling javascript in browser


/**

* Verifying ToolTip information - Must enable the javascript in browser


*

* @param driver

* @param objectLocator

* @return


*/

public String toolTipInformation(WebDriver driver, String objectLocator) {

WebElement element;
String toolTipMsg = "";

try {
element = findElement(driver, objectLocator);
Actions builder = new Actions(driver);
builder.moveToElement(element).build().perform();
toolTipMsg = driver.findElement(By.id("tooltip")).getText();

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

Note : example to enable javascript

FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("javascript.enabled", false); - See more at: http://software-testing-tutorials-automation.blogspot.in/2015/01/how-to-disable-javascript-using-custom.html#sthash.NeR3YIhK.dpuf
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("javascript.enabled", true);

 

Friday, May 13, 2016

Selenium integration with Jenkins


Selenium integration with Jenkins

1.   Download Jenkins.war (https://jenkins.io/index.html)

2.       Open Command prompt, navigate to Jenkins.war file directory and type (java -jar jenkins.war) and click on enter.
Note: Should display "Jenkins is fully up and running" message on CMD

3.    Once Jenkins server is up and running, Open any browser and type the url  http://localhost:8080 

4.    Click on > Manage Jenkins

5.    Click on > Configure System

6.    Click on > Add JDK button (Under JDK Section).

7.    Uncheck "Install automatically" check box

8.    Give the “Name” as JAVA_HOME

9.    Give the "JAVA_HOME" path (EX: C:\Program Files\Java\jdk1.8.0_60)

10.  Configure Email notification  (Optional)
 
http://i1.wp.com/learn-automation.com/wp-content/uploads/2015/03/3376.png

11. Click on save and apply

12. Click on "Add Build Step" -> “Execute Window batch command”

13. Give batch file name and click on Apply and save

14. Click on “New Item” option

15. Give the “Item Name” (Job-Name)

16. Click “Build a free-style software project” radio button

17. Click on OK  button

18. Navigate to “Advanced Project Options”

19. Check the “Use custom workspace”

20. Give "Directory" as the project home directory

21. Click on ‘Build Now” option

22. Click “Console Output” to verify the output
 
Schedule a build in Jenkins for periodic execution

23. Open job which we created

24. Click on “Configure”

25. Select “Build periodically” check box

·         Example 1- if you specify    00 22 * * *  it means your build will run daily @ 10 PM

·         Example 2- if you specify    50 * * * *  it means your build will run daily  50 min  after every hour

·         Example 3- if you specify    00 22 1 * *  it means your build will run every monday @ 10 PM
http://i0.wp.com/learn-automation.com/wp-content/uploads/2015/03/3393.png


26. Click on Apply and Save buttons
 
Jenkins will accept 5 parameter lest discuss one by one

* * * * *
  • Here first parameter- specify minute and range will vary from 0-59
  • Here second parameter- specify hours and range will vary from 0-11
  • Here third parameter- specify day and range will vary from 0-7 here 0 and 7 will be Sunday
  • Here fourth parameter- specify month and range will vary from 1-12
  • Here fifth parameter- specify year so here you can specify *