Blog to understand automation concepts in QTP, Selenium Webdriver and Manual Testing concepts
Mindmap explaining automation framework
In this mind map, we will discuss on automation framework in QTP explaining:
What is automation framework, what are different types of framework, what are key features of an automation framework and expectations from an automation framework:
Content in the mindmap:
Automation Framework in QTP
1. Set of Guidelines
1.1 Coding standards
1.2 Structure of test Data
1.3 Folder structure
1.3.1 Test Scripts
1.3.2 Test Libraries
1.3.3 Test Data
1.3.4 Test results
1.4 Object Repositories
Automation Framework in QTP
1. Set of Guidelines
1.1 Coding standards
1.2 Structure of test Data
1.3 Folder structure
1.3.1 Test Scripts
1.3.2 Test Libraries
1.3.3 Test Data
1.3.4 Test results
1.4 Object Repositories
2. Decisions
2.1 Decide automation framework to be used
2.2 Decide object Identification technique
2.3 Decide on set of automation guidelines
3. Framework Types
3.1 Linear
3.1.1 Script created by recording on AUT
3.1.2 Script creation is simple, fast and require minimal knowledge
3.1.3 No reusability of code and high maintenance cost
3.2 Functional Decomposition
3.2.1 Divide test into logical groups or functions
3.2.2 Reusability of code is better
3.2.3 Scripts cannot be run with multiple set of data
3.3 Data Driven
3.3.1 Test data stored in external files drives automation by executing scripts with multiple sets of data
3.3.2 Covers multiple scenario with same script and change in data does not require change in scripts
3.3.3 Additional effort of creating test data and good knowledge of tool for resource
3.4 Keyword Driven
3.4.1 Object, action and arguments are maintained in an excel sheet in form of keywords
3.4.2 Highly reusable code can be used across applications. Once framework is created, easy to create test scripts.
3.4.3 Initial investment in creating framework is high and understanding framework for new user is comparably difficult
3.5 BPT Framework
3.5.1 BPT Components linked together to create test script using Quality center.
3.5.2 Easier for business users to create scripts
3.5.3 License cost of BPT and dependency on QC
3.6 Hybrid Framework
3.6.1 Uses best features of various frameworks
3.6.2 Highly robust and maintainable if properly implemented
3.6.3 Require skilled automation experts.
4. Great Expectations
4.1 Framework should Support Versioning Controlling for files
4.2 should be executed in different environments
4.3 minimal change in script for object changes
4.4 Robust and easy to interpret reporting system
4.5 Should have strong error handling and recovery scenarios
MindMap: Testing Process in QTP
In this article, we will discuss the mindmap for testing process in QTP (the same approach can be used with other tools also).Below are the steps in the testing process for QTP to be followed:
- Analyse the application under test
- Perform a proof of concept for understanding automation feasibility.
- Design the automation test strategy and automation framework
- Create test scripts and integrate with external tools like quality center or ALM.
- Execute test scripts.
- Define strategy for support and maintenance of automation suite.
MindMap for Automation testing
This mind map illustrates the basic information about automation testing. Following information is mapped in the below mind map:
- What is automation testing
- What are the different phases in automation process.
- What are different types of frameworks.
- What are different automation tools.
- What are the advantage of Automation testing
Continuing TestNG test execution post assertion failure
Assertions are used to validate if a condition holds true. In previous article, we discuss on how to create assertion in TestNG.
See: How to work with Assertions in TestNG tests.
Assertion added in previous article were hard assertion, i.e : current test execution stops once an assertion fails and the next test in the test suite is executed while using hard assertions. When we use import org.testng.Assert library, the test execution stops once an error is encountered. This is useful to stop an test execution in case of critical defect in the test, and move to next test in the suite.
Example of creating multiple test in explained in the below TestNG.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<test name="Test1">
<classes>
<class name="testNG.assertionVal"/>
</classes>
</test>
<test name="Test2">
<classes>
<class name="testNG.NewTest1"/>
</classes>
</test>
</suite>
There can be scenario where we do not want to stop test execution due to a minor validation defect. In that scenario we can use the concept of soft assertion, i.e the test case execution will continue although the test will be marked as failed in the final results but will be executed until the test flow is completed or an hard assertion failure condition occurs.
Below points are important to note from current article:
- There are two types of assertion Hard assertion and soft assertion.
- Hard assertion use import org.testng.Assert library
- Soft assertion use import org.testng.asserts.SoftAssert library
- Step softas.assertAll() needs to be added to display the validation failure from soft assertion failure
Below code explains how to use soft assertion in the test.
package testNG;
import org.testng.Assert;
import org.testng.annotations.Test;
//soft assertion will use the below softAssert class
import org.testng.asserts.SoftAssert;
public class assertionVal {
// Create an soft assertion object softas
SoftAssert softas = new SoftAssert();
@Test
public void assertVal()
{
//Create an assertion similar to hard assertion as shown below
softas.assertEquals("aaaa", "bb");
softas.assertEquals("aa","aaccc","asserts exists");
// this is an example of hard assertion, test will stop execution
//at this step in case error is encountered.
Assert.assertEquals("aa", "aa");
System.out.println("nitin");
//This step is very important as without this step,
//no soft assertion failure will be reported in test result.
softas.assertAll();
}
}
How to work with Assertions in TestNG tests
Assertions are added in TestNG to validate whether a condition is true or false and report in test results the execution state of condition. For example in selenium test for login, we provide valid username and password and login, we expect the title to be displayed correctly in the page. Assertions are used in code, where we need to validate the state of an object properties and fail the test in case expected conditions are not met.
Different type of assertions:
- Assert.AssertEquals(Expected condition, Actual
condition) – This compares the expected condition with actual condition and
fails the test in case the assertion fails.Different object types can be
compared using Assert.AssertEquals
- Assert.AssetEquals(Expected condition, Actual
condition, Message)- This compares the expected condition with actual condition
and fails the test in case the assertion fails displaying the message as
defined while calling the assertion.
- Assert.assertFalse(Boolean condition) - Asserts
that a condition is false
- Assert.assertFalse(Boolean condition, String
Message )- Asserts
that a condition is false. If it isn't, an Assertion Error, with the given
message, is thrown.
- Assert.assertTrue(Boolean condition, String
Message )- Asserts
that a condition is true. Assertion fails if condition is not true and string
message is displayed.
- Assert.AssertNull(object) – Validates if a
assertion is null.
There are various other assertion which we can add in TestNG test. The issue with assertion is case execution stops in case an assertion fails. So if we do not want to stop a test on failure and continue with test execution, using assert statement will not work, instead we can wrap the assert function to verify the test condition and continue with test execution. We will discuss in future article for how to use soft assertion in the test scripts.
Below code explains how to use different assert in TestNG tests.
package testNG;
import java.io.File;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class assertionVal {
WebDriver driver;
@BeforeTest
public void setup()
{
File file = new File("D:\\selenium\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
driver = new InternetExplorerDriver();
}
@Test
public void assertVal()
{
driver.navigate().to("http://qaautomationqtp.blogspot.com");
Assert.assertEquals("Learning Automation Concepts in QTP", driver.getTitle());
//Assert to compare two values and reporting a message in case validation fails
Assert.assertEquals("aaa", "aaa", "this is the first test and value does not match");
//Assert to validate a boolean condition as false
Assert.assertFalse(driver.getTitle().contentEquals("Learning Automation Concepts in QTP"));
//Assert to validate a boolean condition as true
Assert.assertFalse(driver.getTitle().contentEquals("Learning Automation Concepts in QTP"));
//Assertion to validate an object is not null.
Assert.assertNotNull("driver");
}
}
Understanding Parameters in TestNG tests
Parameters can be passed to a method from testNG.xml file. In this article, we will discuss on how to Pass parameter value in the methods.
Focus Area of this article:
- How to pass a parameter from Testng.xml file to the test method.
- How to define default value of a parameter in a test method.
- How to pass multiple parameters through TestNG,xml
How to pass a parameter from Testng.xml file to the test method:
In the below code, we have defined parameter with name as "Param1". Method mailval has argument test which will accept the value as defined in TestNG.xml file.
package testNG; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class NewTestoptionalParameter { @Test @Parameters("Param1") public void mailval(String Test) { System.out.println(Test); } }
In the testNG.xml file, we need to provide the parameter with name and a value assigned to the parameter as seen below. So if we execute this test from testNG.xml file, we will get the output as Parameter has name as param 1.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<parameter name="Param1" value="Parameter has name as param 1" />
<test name="Test1">
<classes>
<class name="testNG.NewTestoptionalParameter"/>
</classes>
</test>
</suite>
Let us assume scenario where we have added a parameter in the Test method, but does not define and provide the value of the parameter in the testNG.xml file as shown in the below xml file code.In this case, on execution of the test, we will get the output as blank.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<test name="Test1">
<classes>
<class name="testNG.NewTestoptionalParameter"/>
</classes>
</test>
</suite>
We can assign default value to a parameter using Optional as shown in the code below. Now in case we do not define the parameter in the TestNG.xml file, the argument will work with the assigned default value and will output in console as "testing".
package testNG; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class NewTestoptionalParameter { @Test @Parameters("Param1") public void mailval(@Optional("testing") String Test) { System.out.println(Test); } }
Next thing, we can define multiple parameters for a method as shown in the code below:
package testNG; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class NewTestoptionalParameter { @Test @Parameters({"Param1","Param2"}) public void mailval(@Optional("resting") String Test, String Test1) { System.out.println(Test); } }
And finally , we can define the test parameter at test level as well as suite level. If a parameter is defined at both test as well as suite level, Parameter value defined at test level is considered.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<parameter name="Param1" value="Parameter has name as param 1s" />
<test name="Test1">
<parameter name="Param1" value="Parameter has name as param 1t" />
<parameter name="Param2" value="Parameter has name as param 2t" />
<classes>
<class name="testNG.NewTestoptionalParameter"/>
</classes>
</test>
</suite>
Working with TestNG.XML to execute Selenium test suite
While using TestNG, we can execute multiple tests or methods in the project based on the test annotations, the methods, and classes in the Project. We will execute the test suite from eclipse using TestNG.xml in this article to keep it simple, although we can execute the Test Suite from command line or through Ant.
Pre-condition:
Focus of this article:
- How to create TestNG xml file to run test suite.
- How to run test from the TestNG xml file in
eclipse.
Let us consider the below two classes in a Java Project. To Keep it simple, we are just outputting a value in each of the Test method. Suppose we have two different classes, we can create a test suite using testng.xml file and run the test suite from eclipse as shown in the below image.
Creating TestNG.xml file for different scenarios:
A. Run all the tests in both classes NewTest and NewTest1. This will execute all the methods with beforetest annotation in both the classes, followed by methods with test annotation, and then methods with afterText annotation.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<test name="Test">
<classes>
<class name="testNG.NewTest"/>
<class name="testNG.NewTest1"/>
</classes>
</test>
</suite>
B. Run test in class NewTest and then the methods in NewTest1 class:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<test name="Test1">
<classes>
<class name="testNG.NewTest"/>
</classes>
</test>
<test name="Test2">
<classes>
<class name="testNG.NewTest1"/>
</classes>
</test>
</suite>
C. Executing all tests in a package with name as
TestNG(Note: TestNG is the name of package in our example, it can be any name
other than TestNG also)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<test name="Test1">
<packages>
<package name="testNG" />
</packages>
</test>
</suite>
D. Executing all tests based on the group Name:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<test name="Test1">
<groups>
<run>
<include name="testemail"/>
<exclude name="testnoemail"/>
</run>
</groups>
<classes>
<class name="testNG.NewTest"/>
<class name="testNG.NewTest1"/>
</classes>
</test>
</suite>
E. Executing specific methods by including methods in the class:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite1">
<test name="Test1">
<classes>
<class name="testNG.NewTest">
<methods>
<include name="emailval" />
</methods>
</class>
<class name="testNG.NewTest1"/>
</classes>
</test>
</suite>
What are Annotations in TestNG: Selenium Automation
In the Previous tutorials, we explained how to add TestNG to eclipse and how to set up for creating the first test using TestNG. In this article, we will understand what annotations in TestNG are and how they are used:
When we create a test in TestNG, we divide the code into
different annotations based on which section needs to be executed and in which
order.
Let us take an example, We have three different tests to be automated. Each of the test starts with Login into application, In the next step, the user has either to view e-mails, write e-mail or verify successful login only. In the final step, we have to log out of application.
To code this, we have to login into application in each of
the three test, so we can define this method or code in @BeforeTest.
Next we will define all the tests to be executed with
annotation @Test and can assign group of test to be executed using group with
test.
Once the test is executed, user will log out from application, this we will tag with annotation @AfterTest.
Below code explains how the three annotations can be used in the test. There are many more annotations which we can add in the test to give logical structure to the test.
package testNG;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
public class NewTest {
@BeforeTest
public void Login()
{
System.out.println("Login into application");
}
@Test(groups = { "testemail" })
public void mailval()
{
System.out.println("test e-mail");
}
@Test(groups = { "testemail" })
public void emailval()
{
System.out.println("e-mailvalidated");
}
@AfterTest
public void Logout()
{
System.out.println("Logout from application");
}
}
Annotations in TestNG
Below table explains the different annotation used in TestNG:
Annotation
|
Description
|
@BeforeSuite
|
Annotated method to be executed before all tests in the suite
have run.
|
@AfterSuite
|
Annotated method to be executed after all tests in the suite has
run.
|
@BeforeTest
|
Annotated method to be executed before any test method belonging
to the classes inside the <test> tag is run.
|
@AfterTest
|
Annotated method to be executed after all the test methods
belonging to the classes inside the <test> tag have run.
|
@BeforeGroups
|
The list of groups that this configuration method will run
before. This method is guaranteed to run shortly before the first test method
that belongs to any of these groups is invoked.
|
@AfterGroups
|
The list of groups that this configuration method will run
after. This method is guaranteed to run shortly after the last test method
that belongs to any of these groups is invoked.
|
@BeforeClass
|
The annotated method to be executed before the first test method
in the current class is invoked.
|
@AfterClass
|
The annotated methods to be executed after all the test methods
in the current class have been run.
|
@BeforeMethod
|
The annotated method to be executed before each test
method.
|
@AfterMethod
|
The annotated method to be executed after each test method.
|
In the next article, we will explain how a test suite is defined in TestNG and how does a test pass or fail in TestNG i.e how to add assertions in TestNG.
Creating first TestNG test using eclipse for Selenium WebDriver
TestNG provides a testing framework to test the application. TestNG framework can be used to write unit test, integration as well as functional tests. Our objective in this blog will be to understand and implement TestNG framework while automating with Selenium WebDriver using eclipse.
In the previous article, we explained how to install TestNG libraries with eclipse. In this article, we will explain how to create first TestNG test in eclipse.
Pre-Requisite: We have installed TestNG as discussed in previous article.
Steps to create first TestNG test in eclipse:
- Create a new Project in eclipse as shown in the image below and add the TestNG library:
Add caption |
- Once we have added the library, we can use the library in our test.
Creating a testNG Class in the java Project:
A testNG test is executed based on the testNG annotations in the TestNG class.
Below code will be generated once we click on finish.
package testNG;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;
public class NewTest {
@Test
public void f() {
}
@BeforeTest
public void beforeTest() {
}
@AfterTest
public void afterTest() {
}
}
Setting Up TestNG with eclipse
The below image explains how to setup TestNG with eclipse.
|
In the next article, we will discuss how to create a TestNG test for selenium in eclipse.
Code to Capture screenshot in Selenium WebDriver Automation
When we run a script in any automation framework, Capturing and reporting images especially in case of failure is required. In this article, we will discuss different ways to capture screenshot and how to report with screenshot.
Steps to reporting with screenshot:
- Create an independent function to capture screenshot.
- Call the screenshot function from the reporting function based on whether to capture screenshot or not.
Different ways to capture screenshot are:
- Using Java.awt class - Recommend to use if automation interacts with other application together with web application.
- Using Selenium webdriver (selenium.TakesScreenshot) - Use this to capture screenshot if only web application is to be tested which are identified using selenium webdriver.
Below code shows how to capture screenshot using the above classes:
1: package testproject;
2: import java.awt.Rectangle;
3: import java.awt.Robot;
4: import java.awt.Toolkit;
5: import java.awt.image.BufferedImage;
6: import java.io.File;
7: import java.util.List;
8: import javax.imageio.ImageIO;
9: import org.apache.commons.io.FileUtils;
10: import org.openqa.selenium.OutputType;
11: import org.openqa.selenium.TakesScreenshot;
12: import org.openqa.selenium.WebDriver;
13: import org.openqa.selenium.ie.InternetExplorerDriver;
14: public class testingC {
15: static WebDriver driver;
16: public static void main(String[] args) throws InterruptedException {
17: // Connect to the Internet driver server and create an instance of Internet explorer driver.
18: File file = new File("D:\\selenium\\IEDriverServer.exe");
19: System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
20: try
21: {
22: driver = new InternetExplorerDriver();
23: }
24: catch(Exception e)
25: {
26: driver=new InternetExplorerDriver();
27: }
28: driver.navigate().to("https://qaautomationqtp.blogspot.com");
29: try {
30: Capturescreenshot("testingscr.png");
31: CapturescreenshotJava("D://testingscr1.png");
32: } catch (Exception e)
33: {
34: e.printStackTrace();
35: }
36: }
37: public static void Capturescreenshot(String StrscreenshotName) throws Exception
38: {
39: File generateFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
40: String strOutFile = "D:\\"+StrscreenshotName;
41: FileUtils.copyFile(generateFile, new File(strOutFile));
42: }
43: public static void CapturescreenshotJava(String StrscreenshotName) throws Exception
44: {
45: Robot robot = new Robot();
46: Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
47: BufferedImage scrImg = robot.createScreenCapture(screenRect);
48: ImageIO.write(scrImg, "png", new File(StrscreenshotName));
49: }
50: }
Using ExpectedConditions for explicit wait in Selenium Webdriver.
In this article, we will discuss on different explicit wait asking the test script to wait for some time based on the expectedcondition for object defined by locator.Before discussing further, let us have a look at generic syntax for adding an explicit wait in the test using expected condition.
WebDriverWait wait = new WebDriverWait(driver, 1000);
wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("QAmail")));
In the first statement, we create an instance wait of the WebdriverWait object with arguments as driver object and the time to wait for existence of element.
In the next statement, we are asking the script to wait until the expected condition is met. In the above script, test script will wait for max 1000 second for element identified with linkText as "QAmail" to be available in the DOM for the page.
Let us define what are the different ways to use expected condition based on which we can add explicit wait in the object.
a. presenceOfElementLocated - Verify presence of element in the DOM.
WebDriverWait wait = new WebDriverWait(driver, 1000);
wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("QAmail")));
b. Using elementToBeClickable
wait.until(ExpectedConditions.elementToBeClickable(By.linkText("TGmail")));
c. Using invisibilityOfElementLocated
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.linkText("tGmail")));
d. invisibilityOfElementWithText - Validating the invisibility of element with text for the element provided.
wait.until(ExpectedConditions.invisibilityOfElementWithText(By.xpath("//div[@id='_eE']"), "tGmail"));
e. textToBePresentInElement - Validating the text to be present in the element defined by locator.
wait.until(ExpectedConditions.textToBePresentInElement(By.xpath("//div[@id='_eE']"),"Gmail"));
f. visibilityOfElementLocated by locator.
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='_eE']")));
g. titleContains - Wait until the title is displayed correctly
wait.until(ExpectedConditions.titleContains("QA Automation QTP"));
h. alertIsPresent - waits for alert to appear in the window.
wait.until(ExpectedConditions.alertIsPresent());
How to get attributes values of element in Selenium using getAttribute Method
Using getAttribute, we can extract the value of attribute of an element in Selenium WebDriver. Extracting values of attribute of element can be helpful in a number of ways. Some of the important use of getattribute method are as follows:
- Name of all the links or button or an object type in the Page.
- Validating if object with particular property exists in the Page.
- Extracting the href value for a button/link.
- Extracting values of element of a particular class or Id. For e.g: If error message are displayed on the page with the same class. We can get all the error messages displayed getting text attribute for all element with the common class name.
Below code explains use of getattribute in Selenium Webdriver for the above purpose.
package testproject;
import java.io.File;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class testingC {
static WebDriver driver;
public static void main(String[] args) throws InterruptedException {
// Connect to the Internet driver server and create an instance of Internet explorer driver.
File file = new File("D:\\selenium\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
try{
driver = new InternetExplorerDriver();
driver.manage().window().maximize();
}
catch(Exception e)
{
driver=new InternetExplorerDriver();
}
driver.navigate().to("https://google.com");
//function to get names of all the links in the Page
getALLNameforObject("link");
// function to validate a particular object with particular text appears in the Page
ValidateObjectExists("link", "About");
//
}
public static void getALLNameforObject(String strObject)
{
if(strObject.toLowerCase().trim().contentEquals("link"))
{
strObject = "a";
}
if(strObject.toLowerCase().trim().contentEquals("button"))
{
strObject = "button";
}
List<WebElement> elemLink = driver.findElements(By.tagName(strObject));
int intLinksinPage = elemLink.size();
System.out.println(intLinksinPage);
for (int i = 0;i<intLinksinPage;i++)
{
System.out.println("The name of the link " + (i+1) +" in the page is :- " + elemLink.get(i).getAttribute("text"));
}
}
public static void ValidateObjectExists(String strObject, String ObjName)
{
if(strObject.toLowerCase().trim().contentEquals("link"))
{
strObject = "a";
}
if(strObject.toLowerCase().trim().contentEquals("button"))
{
strObject = "button";
}
List<WebElement> elemLink = driver.findElements(By.tagName(strObject));
int intLinksinPage = elemLink.size();
System.out.println(intLinksinPage);
for (int i = 0;i<intLinksinPage;i++)
{
if(elemLink.get(i).getAttribute("text").contentEquals(ObjName))
{
System.out.println("Link exists in Page with text " + elemLink.get(i).getAttribute("text"));
}
}
}
}
Highlighting an element using JavaScriptexecutor: Selenium Code Solution
Problem Statement: How to highlight an element in Selenium Webdriver?
Solution : We can highlight an element in Selenium WebDriver by creating a custom method to highlight an element using JavaScriptexecutor.
What is JavaScriptexecutor?
JavaScriptexecutor
class provides mechanism to execute Javascript through selenium driver. JavaScript executor provides two
methods to execute javascript in the code:
a.) executeAsyncScript - Execute an
asynchronous code of JavaScript
b.) executeScript - Executes a code of JavaScript.
Parameters for the two methods are the Script to be executed and arguments for the script.
Below package needs to be imported to use
JavascriptExecutor:
import
org.openqa.selenium.JavascriptExecutor;
Below code explains how to use JavaScriptExecutor to highlight an element in Selenium WebDriver using Java.
import java.io.File;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class testingC {
static WebDriver driver;
public static void main(String[] args) throws InterruptedException {
// Connect to the Internet driver server and create an instance of Internet explorer driver.
File file = new File("D:\\selenium\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
try{
driver = new InternetExplorerDriver();
//added new line to maximise browser on launch
driver.manage().window().maximize();
}
catch(Exception e)
{
driver=new InternetExplorerDriver();
}
//Navigate to the webpage and identify the element to be highigted
driver.navigate().to("https://qaautomationqtp.blogspot.com");
WebElement element = driver.findElement(By.linkText("Play"));
//highlight the element
methodhighlightElement(element);
element.click();
}
public static void methodhighlightElement(WebElement element) throws InterruptedException
{
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].setAttribute('style','border: solid 8px blue')", element);
Thread.sleep(2000);
js.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "");
}
}
Difference between Actions and Functions in QTP/UFT 11.5
Labels:
Advanced QTP,
QTP Basics Tutorials,
QTP Tutorials
Comparison between Action and functions in QTP/ UFT 11.5 is explained in this article. We discuss on how action and functions are similar and difference between two in UFT 11.5/ QTP
Parameter
|
Action
|
Functions
|
Feature
Type
|
Action
is a feature provided by QTP/UFT
|
Function is a feature of
VBScript
|
Return
Value
|
We can pass as well as return
multiple values using input and output parameters
|
A function returns a single value although values of multiple
variable can be passed using public variable with global scope
|
Assets
|
An
Action has local repositories, datatable, Active screen etc associated with it
|
Function cannot have local
repositories, datatable and other QTP
features associated with it
|
Multiple function can be created in
an action
|
Multiple Actions cannot be created in a function.
|
|
Size
and Performance
|
Size
of the test increases with increase in number of actions as there is data
table, OR associated with each of the test.
|
Performance of using function
is better compared to action and consumes less size.
|
Actions
|
An Action is associated with
a single test
|
Function library can be associated with multiple tests and can
be loaded at runtime.
|
Maximum
Allowed
|
There
can be maximum 120 actions in a test and If any test has 120 actions in it,
it will definitely not a good test script
|
There is no limit of number of
function used in a test.
|
Maintenance
Cost
|
Maintenance cost is higher in
case of Action, as we need to open each test to make change at action. While multiple
function library being vbs files can be updated easily.
|
|
Similarity
between the Two
|
The
purpose of using Actions or function is to provide modularity to the test
scripts and should be used to create structured tests.
|
|
Extension
|
Extension of action script is
.mts while function library can have extension as .vbs, .qfl.
|
Subscribe to:
Posts (Atom)