$npx -y skills add LambdaTest/agent-skills --skill nemojs-skillGenerates Nemo.js automation tests in JavaScript. PayPal's Selenium-based test framework for Node.js. Use when user mentions "Nemo.js", "nemo automation". Triggers on: "Nemo.js", "nemo automation", "nemo test", "PayPal test framework".
| 1 | # Nemo.js Automation Skill |
| 2 | |
| 3 | > PayPal's Selenium-based test automation framework for Node.js. |
| 4 | |
| 5 | For TestMu AI cloud execution, see [reference/cloud-integration.md](reference/cloud-integration.md) and [shared/testmu-cloud-reference.md](../shared/testmu-cloud-reference.md). |
| 6 | |
| 7 | ## Core Patterns |
| 8 | |
| 9 | ### Basic Test (Mocha) |
| 10 | |
| 11 | ```javascript |
| 12 | const Nemo = require('nemo'); |
| 13 | const { expect } = require('chai'); |
| 14 | |
| 15 | describe('Login Flow', function() { |
| 16 | this.timeout(30000); |
| 17 | let nemo; |
| 18 | |
| 19 | before(async () => { |
| 20 | nemo = await Nemo(); |
| 21 | }); |
| 22 | |
| 23 | after(async () => { |
| 24 | await nemo.driver.quit(); |
| 25 | }); |
| 26 | |
| 27 | it('should login with valid credentials', async () => { |
| 28 | await nemo.driver.get(nemo.data.baseUrl + '/login'); |
| 29 | const email = await nemo.view._find('#email'); |
| 30 | await email.sendKeys('user@test.com'); |
| 31 | const password = await nemo.view._find('#password'); |
| 32 | await password.sendKeys('password123'); |
| 33 | await nemo.view._find('button[type="submit"]').click(); |
| 34 | |
| 35 | await nemo.view._waitVisible('.dashboard', 10000); |
| 36 | const url = await nemo.driver.getCurrentUrl(); |
| 37 | expect(url).to.include('/dashboard'); |
| 38 | }); |
| 39 | |
| 40 | it('should show error for invalid credentials', async () => { |
| 41 | await nemo.driver.get(nemo.data.baseUrl + '/login'); |
| 42 | await nemo.view._find('#email').sendKeys('wrong@test.com'); |
| 43 | await nemo.view._find('#password').sendKeys('wrong'); |
| 44 | await nemo.view._find('button[type="submit"]').click(); |
| 45 | |
| 46 | await nemo.view._waitVisible('.error', 5000); |
| 47 | const error = await nemo.view._find('.error'); |
| 48 | const text = await error.getText(); |
| 49 | expect(text).to.include('Invalid'); |
| 50 | }); |
| 51 | }); |
| 52 | ``` |
| 53 | |
| 54 | ### View Locators |
| 55 | |
| 56 | ```javascript |
| 57 | await nemo.view._find('#css-id'); // CSS |
| 58 | await nemo.view._find('.class-name'); // CSS class |
| 59 | await nemo.view._find('[data-testid="login"]'); // Data attribute |
| 60 | await nemo.view._find('xpath://button[@type]'); // XPath prefix |
| 61 | await nemo.view._waitVisible(locator, timeout); // Wait + find |
| 62 | await nemo.view._finds('.items'); // Find multiple |
| 63 | ``` |
| 64 | |
| 65 | ### Configuration (nemo.config.json) |
| 66 | |
| 67 | ```json |
| 68 | { |
| 69 | "driver": { |
| 70 | "browser": "chrome", |
| 71 | "server": "http://localhost:4444/wd/hub" |
| 72 | }, |
| 73 | "data": { |
| 74 | "baseUrl": "http://localhost:3000" |
| 75 | }, |
| 76 | "view": ["locator"], |
| 77 | "plugins": { |
| 78 | "view": { "module": "nemo-view" } |
| 79 | } |
| 80 | } |
| 81 | ``` |
| 82 | |
| 83 | ### Cloud Execution on TestMu AI |
| 84 | |
| 85 | Set environment variables: `LT_USERNAME`, `LT_ACCESS_KEY` |
| 86 | |
| 87 | ```json |
| 88 | { |
| 89 | "driver": { |
| 90 | "browser": "chrome", |
| 91 | "server": "https://hub.lambdatest.com/wd/hub", |
| 92 | "serverCaps": { |
| 93 | "username": "${LT_USERNAME}", |
| 94 | "accessKey": "${LT_ACCESS_KEY}" |
| 95 | }, |
| 96 | "capabilities": { |
| 97 | "LT:Options": { |
| 98 | "user": "${LT_USERNAME}", |
| 99 | "accessKey": "${LT_ACCESS_KEY}", |
| 100 | "build": "Nemo Build", |
| 101 | "name": "Nemo Test", |
| 102 | "platformName": "Windows 11", |
| 103 | "video": true, |
| 104 | "console": true, |
| 105 | "network": true |
| 106 | } |
| 107 | } |
| 108 | } |
| 109 | } |
| 110 | ``` |
| 111 | |
| 112 | ## Setup: `npm install nemo nemo-view --save-dev` |
| 113 | ## Run: `npx mocha test/*.js --timeout 30000` |
| 114 | |
| 115 | ## Deep Patterns |
| 116 | |
| 117 | For advanced patterns, debugging guides, CI/CD integration, and best practices, |
| 118 | see `reference/playbook.md`. |