Introduction to Protractor
Protractor is an end-to-end testing framework specifically designed for Angular and AngularJS applications. Developed by Google, this powerful tool allows developers to test their web applications efficiently and accurately. Protractor can interact with your Angular app as a real user would, which makes it a crucial part of the development and quality assurance process.
Setting Up Protractor
First, you’ll need to install Protractor globally using npm:
npm install -g protractor
After installation, update the WebDriver binaries with:
webdriver-manager update
Protractor Configuration
Create a configuration file protractor.conf.js
to set up the testing environment:
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['spec.js'],
capabilities: {
browserName: 'chrome'
}
};
Writing Tests with Protractor
Here are some useful Protractor API methods and code snippets:
1. browser.get(url)
Navigate to a specified URL:
browser.get('http://www.example.com');
2. element(by.css(selector))
Select an element using CSS selector:
const loginButton = element(by.css('.login-btn'));
3. element(by.id(‘id’))
Select an element by its ID:
const usernameField = element(by.id('username'));
4. element(by.name(‘name’))
Select an element by its name attribute:
const passwordField = element(by.name('password'));
5. element(by.xpath(‘xpath’))
Select an element using XPath:
const checkbox = element(by.xpath('//input[@type="checkbox"]'));
6. browser.sleep(ms)
Pause the test for the specified time:
browser.sleep(2000);
7. browser.waitForAngular()
Waits for Angular to finish rendering before continuing:
browser.waitForAngular();
8. element.all(locator)
Find multiple elements using a locator:
const listItems = element.all(by.css('.list-item'));
9. ExpectedConditions
Wait for certain conditions before proceeding, like visibility of an element:
const EC = protractor.ExpectedConditions;
browser.wait(EC.visibilityOf(element(by.id('myElement'))), 5000);
Complete App Example
Here’s how you can integrate these APIs into a complete Protractor test scenario:
describe('Protractor Demo App', function() {
it('should have a title', function() {
browser.get('http://www.example.com');
let title = browser.getTitle();
expect(title).toEqual('Example Domain');
const loginButton = element(by.css('.login-btn'));
loginButton.click();
const usernameField = element(by.id('username'));
usernameField.sendKeys('testUser');
const passwordField = element(by.name('password'));
passwordField.sendKeys('testPass');
const submitButton = element(by.css('.submit-btn'));
submitButton.click();
browser.waitForAngular();
const successMessage = element(by.css('.success-message'));
expect(successMessage.getText()).toEqual('Login Successful');
});
});
By harnessing Protractor’s capabilities, you can automate tedious tasks and ensure a seamless user experience. Happy Testing!
Hash: a1dfcc43c40b96d05b1309bfbab6ff10582a081e6b6f52793cd0742a5d912411