RemoteWebDriver: This driver class comes directly from the upstream Selenium project. This is a pretty generic driver where initializing the driver means making network requests to a Selenium hub to start a driver session. Since Appium operates on the client-server model, Appium uses this to initialize a driver session. However, directly using the RemoteWebDriver is not recommended since there are other drivers available that offer additional features or convenience functions.
AppiumDriver: This driver class inherits from the RemoteWebDriver class, but it adds in additional functions that are useful in the context of a mobile automation test through the Appium server.
AndroidDriver: This driver class inherits from AppiumDriver, but it adds in additional functions that are useful in the context of a mobile automation test on Android devices through Appium. Only use this driver class if you want to start a test on an Android device or Android emulator.
IOSDriver: This driver class inherits from AppiumDriver, but it adds in additional functions that are useful in the context of a mobile automation test on iOS devices through Appium. Only use this driver class if you want to start a test on an iOS device or iOS emulator.
As you can see, the drivers and their names tie in closely with what they do. When it comes to initializing a driver, only use the Android or IOS drivers.
Thursday, 7 June 2018
Wednesday, 16 May 2018
Interview question | Page Factory | Lazy loading
Here is the interview question:
As per "Page Factory", all the elements will be initialized at the time of page load.
But in dynamic applications how page factory works?
Ex: Assure a drop down content ( options) loads on click of the respected select box, how can you implement page factory for this?, as page factory initializes elements at the time of page load only.
Answer:
Lazy load concept.
AjaxElementLocatorFactory is a lazy load concept in Page Factory pattern to identify WebElements only when they are used in any operation
i.e. a timeOut for a WebElement can be assigned to the Object page class with the help of AjaxElementLocatorFactory.
Syntax : ( similer to plain "Page Factory init elemnts" method )
PageFactory.initElements(new c(driver, 30), this);
If element not found in 30 secs, NoSuchElemementException throws.
happy coding.
As per "Page Factory", all the elements will be initialized at the time of page load.
But in dynamic applications how page factory works?
Ex: Assure a drop down content ( options) loads on click of the respected select box, how can you implement page factory for this?, as page factory initializes elements at the time of page load only.
Answer:
Lazy load concept.
AjaxElementLocatorFactory is a lazy load concept in Page Factory pattern to identify WebElements only when they are used in any operation
i.e. a timeOut for a WebElement can be assigned to the Object page class with the help of AjaxElementLocatorFactory.
Syntax : ( similer to plain "Page Factory init elemnts" method )
PageFactory.initElements(new c(driver, 30), this);
If element not found in 30 secs, NoSuchElemementException throws.
happy coding.
Thursday, 3 May 2018
query HTML String using jsoup
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import org.apache.commons.lang.RandomStringUtils;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import org.apache.commons.lang.RandomStringUtils;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
Public Class Test
{
public void m1(){
try {
URL myUrl = new URL("https://www.hello.com/abc/abo.php");
URLConnection yc = myUrl.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8"));
String inputLine;
StringBuilder a = new StringBuilder();
while ((inputLine = in.readLine()) != null)
a.append(inputLine);
in.close();
String str1 = a.toString();
Document parsedHtmlFragment = Jsoup.parse(str1);
Elements matchingLIs = parsedHtmlFragment.select("#ID");
for (Element matchingLI : matchingLIs) {
cGuid = matchingLI.text();
}
} catch (Exception e) {
// TODO: handle exception
} // TODO Auto-generated method stub
}
Thursday, 26 April 2018
Fiddler : App load testing at each layer
How to capture HTTPS traffic in Fiddler
Download Fiddler software: https://www.telerik.com/download/fiddler
Logo:

The software looks like:
No Configuration required to capture Web Requests in Fiddler.
Every browser Requests are captured by default.
BUT:
By default Fiddler doesn’t show the content of Web requests made to HTTPS Url (Secure site) because it's encrypted. Perform following steps if you want to see HTTPS Traffic.
- Launch Fiddler
- Go to Tools > Fiddler Options > HTTPS > Check [Decrypt Https Traffic Option]
- Once prompted accept certificate generated by Fiddler
To view compressed response in fiddler perform following steps.
- Click on the web request entry on left pane
- Click on the Inspector Tab > Click Transformer tab from bottom panel
- Click on transformer tab and select No compression option and then click Raw tab
Download Fiddler software: https://www.telerik.com/download/fiddler
Logo:
The software looks like:
No Configuration required to capture Web Requests in Fiddler.
Every browser Requests are captured by default.
BUT:
By default Fiddler doesn’t show the content of Web requests made to HTTPS Url (Secure site) because it's encrypted. Perform following steps if you want to see HTTPS Traffic.
- Launch Fiddler
- Go to Tools > Fiddler Options > HTTPS > Check [Decrypt Https Traffic Option]
- Once prompted accept certificate generated by Fiddler
To view compressed response in fiddler perform following steps.
- Click on the web request entry on left pane
- Click on the Inspector Tab > Click Transformer tab from bottom panel
- Click on transformer tab and select No compression option and then click Raw tab
Wednesday, 25 April 2018
Java Program : write a method to check if it is well formed expression. Eg: {[()]}
This question was asked in an interview that I found interesting.
Here you go.
I know, There are other ways to do it better.
Map<Character, Character> exprssionMap = new HashMap<>();
exprssionMap.put('{', '}');
exprssionMap.put('[', ']');
exprssionMap.put('(', ')');
String inputExpression = "{[({{)}}]}";
int expressionLengh = inputExpression.length();
if (expressionLengh % 2 == 1) {
System.out.println("malformed Expression; Size of the Expression is not even number");
} else {
for (int i = 0; i < expressionLengh / 2; i++) {
if (!exprssionMap.get(inputExpression.charAt(i))
.equals(inputExpression.charAt(expressionLengh - 1 - i))) {
System.out.println(
"Matching expression not found for: " + inputExpression.charAt(i) + "; index:" + i);
}
}
}
Happy Coding.
Here you go.
I know, There are other ways to do it better.
Map<Character, Character> exprssionMap = new HashMap<>();
exprssionMap.put('{', '}');
exprssionMap.put('[', ']');
exprssionMap.put('(', ')');
String inputExpression = "{[({{)}}]}";
int expressionLengh = inputExpression.length();
if (expressionLengh % 2 == 1) {
System.out.println("malformed Expression; Size of the Expression is not even number");
} else {
for (int i = 0; i < expressionLengh / 2; i++) {
if (!exprssionMap.get(inputExpression.charAt(i))
.equals(inputExpression.charAt(expressionLengh - 1 - i))) {
System.out.println(
"Matching expression not found for: " + inputExpression.charAt(i) + "; index:" + i);
}
}
}
Happy Coding.
Thursday, 15 February 2018
Selenium Grid -> Get Node Ip address
public void getNodeIpAddress(){
try {
URL url = new URL("http://hub-ip:4444//grid/api/testsession?session="+((RemoteWebDriver) driver).getSessionId().toString());
BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", url.toExternalForm());
DefaultHttpClient client = new DefaultHttpClient();
HttpHost host = new HttpHost(url.getHost(), url.getPort());
HttpResponse response = client.execute(host, request);
String responseBody=EntityUtils.toString(response.getEntity());
System.out.println(responseBody);
//Here you can find ip addr of the node machine at ProxyId parameter
// URL nodeUrl = new URL(object.getString("proxyId"));
//return nodeUrl.getHost();
} catch (Exception e){
}
try {
URL url = new URL("http://hub-ip:4444//grid/api/testsession?session="+((RemoteWebDriver) driver).getSessionId().toString());
BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", url.toExternalForm());
DefaultHttpClient client = new DefaultHttpClient();
HttpHost host = new HttpHost(url.getHost(), url.getPort());
HttpResponse response = client.execute(host, request);
String responseBody=EntityUtils.toString(response.getEntity());
System.out.println(responseBody);
//Here you can find ip addr of the node machine at ProxyId parameter
// URL nodeUrl = new URL(object.getString("proxyId"));
//return nodeUrl.getHost();
} catch (Exception e){
}
Saturday, 9 December 2017
Subscribe to:
Posts (Atom)