protractor-skill
Generates Protractor E2E tests for Angular/AngularJS apps in JS/TS. NOTE: Protractor is officially deprecated — recommend Playwright or Cypress. Use when user mentions "Protractor", "element(by.model())", "Angular E2E". Triggers on: "Protractor", "element(by.model)", "Angular E2E test", "protractor.conf".
How do I install this agent skill?
npx skills add https://github.com/lambdatest/agent-skills --skill protractor-skillIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides comprehensive templates and instructions for maintaining Protractor E2E tests and migrating them to modern frameworks like Playwright. It follows security best practices by recommending environment variables for credentials and uses well-known services for cloud execution. No malicious patterns were detected.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
- Runlayerfail
3/4 files flagged
- ZeroLeakspass
Score: 93/100 · 2 sections analyzed
What does this agent skill do?
Protractor Automation Skill (Deprecated)
Protractor reached end-of-life in 2023. Angular team recommends Playwright or Cypress.
For TestMu AI cloud execution, see reference/cloud-integration.md and shared/testmu-cloud-reference.md.
Core Patterns
Basic Test
describe('Login', () => {
beforeEach(async () => {
await browser.get('/login');
});
it('should login with valid credentials', async () => {
await element(by.model('email')).sendKeys('user@test.com');
await element(by.model('password')).sendKeys('password123');
await element(by.css('button[type="submit"]')).click();
expect(await browser.getCurrentUrl()).toContain('/dashboard');
expect(await element(by.css('.welcome')).getText()).toContain('Welcome');
});
it('should show error for invalid credentials', async () => {
await element(by.model('email')).sendKeys('wrong@test.com');
await element(by.model('password')).sendKeys('wrong');
await element(by.css('button[type="submit"]')).click();
expect(await element(by.css('.error')).isDisplayed()).toBe(true);
});
});
Angular-Specific Locators
element(by.model('ctrl.email')); // ng-model
element(by.binding('ctrl.username')); // Angular binding
element(by.exactBinding('ctrl.name')); // Exact binding
element(by.repeater('item in items')); // ng-repeat
element.all(by.repeater('item in items')).count(); // Count repeater
element(by.cssContainingText('.item', 'Active')); // CSS + text
element(by.buttonText('Submit')); // Button text
element(by.partialButtonText('Sub')); // Partial text
Page Objects
class LoginPage {
constructor() {
this.emailInput = element(by.model('email'));
this.passwordInput = element(by.model('password'));
this.loginButton = element(by.css('button[type="submit"]'));
this.errorMessage = element(by.css('.error'));
}
async login(email, password) {
await this.emailInput.sendKeys(email);
await this.passwordInput.sendKeys(password);
await this.loginButton.click();
}
}
// Usage
const loginPage = new LoginPage();
await loginPage.login('user@test.com', 'password123');
protractor.conf.js
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['specs/**/*.spec.js'],
capabilities: { browserName: 'chrome' },
jasmineNodeOpts: { defaultTimeoutInterval: 30000 },
onPrepare: () => {
browser.waitForAngularEnabled(true);
}
};
Migration Guide
| Protractor | Playwright |
|---|---|
element(by.model('x')) | page.locator('[ng-model="x"]') |
element(by.css('#id')) | page.locator('#id') |
browser.get(url) | page.goto(url) |
element.sendKeys(text) | locator.fill(text) |
browser.sleep(ms) | page.waitForTimeout(ms) |
browser.waitForAngular() | Not needed (auto-wait) |
Cloud Execution on TestMu AI
Set environment variables: LT_USERNAME, LT_ACCESS_KEY
// conf.js
exports.config = {
seleniumAddress: `https://${process.env.LT_USERNAME}:${process.env.LT_ACCESS_KEY}@hub.lambdatest.com/wd/hub`,
capabilities: {
browserName: 'chrome',
'LT:Options': {
user: process.env.LT_USERNAME,
accessKey: process.env.LT_ACCESS_KEY,
build: 'Protractor Build',
name: 'Protractor Test',
platformName: 'Windows 11',
video: true,
console: true,
network: true,
},
},
};
Run: npx protractor conf.js (deprecated, use Playwright/Cypress instead)
Deep Patterns
For advanced patterns, debugging guides, CI/CD integration, and best practices,
see reference/playbook.md.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/lambdatest/agent-skills/protractor-skill">View protractor-skill on skillZs</a>