{"id":20555130,"url":"https://github.com/adobecom/nala","last_synced_at":"2026-03-09T06:31:32.798Z","repository":{"id":60249633,"uuid":"488394132","full_name":"adobecom/nala","owner":"adobecom","description":"Automated E2E testing of Milo-based projects.","archived":false,"fork":false,"pushed_at":"2026-02-18T06:42:58.000Z","size":23685,"stargazers_count":17,"open_issues_count":8,"forks_count":40,"subscribers_count":17,"default_branch":"main","last_synced_at":"2026-02-20T13:52:36.815Z","etag":null,"topics":["automation","milo","playwright"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adobecom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-05-03T23:38:04.000Z","updated_at":"2026-02-09T08:49:49.000Z","dependencies_parsed_at":"2023-02-13T02:31:33.792Z","dependency_job_id":"ff02ff2a-707a-4c2d-ac0b-ad398c8f8922","html_url":"https://github.com/adobecom/nala","commit_stats":{"total_commits":123,"total_committers":10,"mean_commits":12.3,"dds":0.3089430894308943,"last_synced_commit":"8d6ce0ba43573308659da4128b06f6c3d6c5e2b7"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/adobecom/nala","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobecom%2Fnala","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobecom%2Fnala/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobecom%2Fnala/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobecom%2Fnala/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adobecom","download_url":"https://codeload.github.com/adobecom/nala/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adobecom%2Fnala/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30284774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","milo","playwright"],"created_at":"2024-11-16T03:16:38.371Z","updated_at":"2026-03-09T06:31:32.781Z","avatar_url":"https://github.com/adobecom.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nala\n\n\u003cimg width=\"600\" alt=\"nala\" src=\"https://user-images.githubusercontent.com/1972095/196048696-62bd0f4a-adf9-455f-bf12-29e6cc7a6290.png\"\u003e\n\nAutomated E2E and integration testing of Milo-based projects.\n\n## Getting started\n\n## Scenario : I wanto to contribute to Nala framework and Milo Test Automation\n\n### 1. Nala repositoy \n\n  - step-1 : Fork the Nala repository\n    - Begin by forking the [Nala](https://github.com/adobecom/nala) repository\n  - step-2 : Clone and Set Remote URLs\n    - After forking, clone the repository to your local machine\n    - Configure the remote URLs for both Upstream (original repository) and Origin (your fork).\n\n### 2. Performing a Dry Run Test\n\n    - Open the Nala codebase in Visual Studio Code (VSCode).\n    - Execute the following sample command in the terminal to run the 'Quote' block tests\n```bash\nnpx playwright test -g@quote\n```\n- If you encounter any errors, install the necessary dependencies as defined in the [`package.json`](https://github.com/adobecom/nala/blob/main/package.json), use the following commands:\n```bash\n - npm install\n - npm fund \n```\n- After installing the dependencies, re-run the above command to execute the Quote block test scripts. The tests should now run successfully.\n \n### 3. Start Nala automation test script creation\nNala automation script creation involves following three simple steps.\n- #### Step-1 : Create [`\u003cblock or feature name\u003e.spec.js`](https://github.com/adobecom/nala/tree/main/features) under the `features` folder and add test cases and data\n  - Please refer below sample template for creating a test case.\n```bash\nmodule.exports = {\n  FeatureName: 'Quote Block',\n  features: [\n    {\n      tcid: '0',\n      name: '@Quote ',\n      path: '/drafts/nala/blocks/quote/quote',\n      data: {\n        quoteCopy: '3D is a crucial part of how we explore the brand in a digital workflow',\n        figCaption: 'Benny Lee',\n        cite: 'Global Manager of Experiential Design, Coca-Cola Company',\n      },\n      tags: '@smoke @regression @milo,',\n    },\n  ],\n}\n```\n\u003cimg width=\"1100\" alt=\"nala spec\" src=\"https://user-images.githubusercontent.com/22153717/245921315-f404404f-0b10-4735-a434-e329767f76aa.png\"\u003e\n----\n\n- #### Step-2 : Create [`\u003cblock or feature name\u003e.page.js`](https://github.com/adobecom/nala/tree/main/selectors) page object under the `selectors` folder and add locators\n  - Please refer to the sample template for creating a selector page object\n```bash\nexport default class Quote {\n  constructor(page) {\n    this.page = page;\n    // quote block locators\n    this.quote = this.page.locator('.quote');\n    this.quoteImage = this.quote.locator('.quote-image');\n    this.quoteCopy = this.quote.locator('p.quote-copy');\n    this.quoteFigCaption = this.quote.locator('p.figcaption');\n    this.quoteFigCaptionCite = this.quote.locator('cite p');\n    this.sectionDark = this.page.locator('.section.dark');\n  }\n}\n```\n\u003cimg width=\"1100\" alt=\"nala pom\" src=\"https://user-images.githubusercontent.com/22153717/245926484-e587de5b-6d66-4d0e-860d-c7a8a9d6fc26.png\"\u003e\n---\n\n- #### Step-3 : Create [`\u003cblock or feature name\u003e.test.js`](https://github.com/adobecom/nala-template/blob/main/tests/quote.block.test.js) under the `tests` folder, and add tests\n  - Please refer sample template for creating tests. Also please refer [Nala onboarding wiki](https://github.com/adobecom/nala/wiki/Onboarding#tests)\n```bash\n// Quote block tests\ntest.describe('Milo Quote block test suite', () =\u003e {\n  // before each test block\n  test.beforeEach(async ({ page }) =\u003e {\n    obj = new Quote(page);\n    webutil = new WebUtil(page);\n  });\n\n  // Test - 0\n  test(`${features[0].name},${features[0].tags}`, async ({ page, baseURL }) =\u003e {\n    console.info(`${baseURL}${features[0].path}`);\n    // test step-1\n    await test.step('Go to Quote block test page', async () =\u003e {\n      await page.goto(`${baseURL}${features[0].path}`);\n      await page.waitForLoadState('domcontentloaded');\n      await expect(page).toHaveURL(`${baseURL}${features[0].path}`);\n    });\n\n    // test step-2\n    await test.step('Verify Quote block content / specs ', async () =\u003e {\n      const { data } = features[0];\n      \n      await expect(page.locator('.quote')).toBeVisible();      \n\n      await expect(await obj.quote).toBeVisible();\n      await expect(await obj.quoteCopy).toContainText(data.quoteCopy);\n      await expect(await obj.quoteFigCaption).toContainText(data.figCaption);\n\n      // verify quote block css\n      expect(await webutil.verifyCSS(\n        await obj.quote,\n        obj.cssProperties.quote,\n      )).toBeTruthy();\n    });\n  });\n});\n\n```\n\u003cimg width=\"1100\" alt=\"nala pom\" src=\"https://user-images.githubusercontent.com/22153717/245931730-f976d196-4074-4718-be51-c568d2365b45.png\"\u003e\n---\n\n## 4 Running Nala tests\n- Nala offers a range of flexible options to suit your testing needs. Please refer to the following choices for running your tests:\n- By default Nala is configured to runs all tests in parallel in headless mode on following browsers \n  - Chrome\n  - Firefox\n  - WebKit\n#### 4.1 : Run Everything\n  - Example-1 : I want to run all tests on all environments or projects on all browsers in headless mode\n```bash\nnpx playwright test\n```\n  - Example-2 : I want to run all tests on all environments or projects on all browsers in GUI mode\n```bash\nnpx playwright test --headed\n```\n  - Example-3 : I want to run all tests on specific environments or projects (i.e [milo-live](https://main--milo--adobecom.hlx.live)) on chrome browser in headless mode\n```bash\nnpx playwright test --project=milo-live-chrome\n```\n- Note : To run tests in GUI mode , you append `--headed` to run commands\n\n\n#### 4.2 : Run Test Suite \n  - Example-1 : I want to run Quote block test suite on all environment or projects on all browsers in headless mode\n```bash\nnpx playwright test quote.block.test\n```\n  - Example-2 : I want to run Quote block test suite on specific environment or projects (i.e [milo-live](https://main--milo--adobecom.hlx.live)) on firefox browsers in headless mode\n```bash\nnpx playwright quote.block.test --project=milo-live-firefox\n```\n\n#### 4.3 : Run Tests using Tags (@) \n  ##### Example-1: I want to run all milo tests on all environment or projects on all browsers in headless mode\n  - headless mode\n```bash\nnpx playwright test -g@milo\n``` \n  - Example-2: I want to run all smoke test suite on all environment or projects on all browsers in headless mode\n```bash\nnpx playwright test -g@smoke\n```\n  - Example-3: I want to run all regression test suite on all environment or projects on all browsers in headless mode\n```bash\nnpx playwright test -g@regression\n```\n  - Example-4: I want to run all quote block tests on all environment or projects on all browsers in headless mode\n```bash\nnpx playwright test -g@quote\n```\n  - Example-5: I want to run quote and marquee blocks tests on all environment or projects on all browsers in headless mode\n```bash\nnpx playwright test -g@quote|@marquee\n```\n  - Example-6: I want to run quote, marquee and accordion blocks tests on (i.e [milo-live](https://main--milo--adobecom.hlx.live)) envronment on chrome browser in headless mode\n```bash\nnpx playwright test -g@quote|@marquee|@accordion --project=milo-live-chrome\n```\n- Note : To run tests using tags, make sure in `.spec.js` file `@tags` are specified \n\n\n### 5 : Run Tests on my localhost (i.e. 'http://localhost:3000',) \n\n  - To run Nala tests on your local host server, make sure you add or have following project object in [`playwright.config.js`](https://github.com/adobecom/nala/blob/main/playwright.config.js)\n    ```bash\n      {\n        name: 'local-chrome',\n        use: {\n          ...devices['Desktop Chrome'],\n          baseURL: envs['@local3000'],\n        },\n      },\n    ```\n##### Now, you are all set to run Nala tests on your local host\n  - Example-1 : I want to run all tests on my local server or on project name = local-chrome on chrome browser in headless mode\n```bash\nnpx playwright test --project=local-chrome\n```\n  - Example-2: I want to run all smoke test suite on my local server or on project name = local-chrome on chrome browser in headless mode\n```bash\nnpx playwright test -g@smoke --project=local-chrome\n```\n- Note: Please refer above section-4, for various run options.\n\n\n## 6 : Run tests on PRs\n##### To run nala tests on pull requests (PRs) please following below labeling options, \n\n  - Example-1 : This PR affects Quote block functionality so i want to test Quote block tests on Milo \n```bash\n  PR Label = @quote @run-nala \n```\n- Example-2 : As part of this PR i want to verify all smoke tests on Milo \n```bash\n  PR Label = @smoke @run-nala\n```\nExample-3 : As part of this PR i want to verify all regression tests on Milo \n```bash\n  PR Label = @regression @run-nala\n```\n- Example-4 : As part of this PR i want to verify accordion and marquee block tests on Milo \n```bash\n  PR Label = @accordion @marquee @run-on-milo\n```\nExample-5 : As part of this PR i want to verify smokes tests on Milo and Bcom applications \n```bash\n  PR Label = @smoke @run-on-milo @run-on-bcom\n```\n- Note: PR should have label of the format :  `@tag(s) @run-on-\u003capp name\u003e`\n\n## 7 : Daily Runs\n##### All Milo and Consuming applications tests are scheduled to run between 6:00 to 9:30 AM PST \n  - Please refer [`\u003cAPP-Nala-Daily-Run.ymls`](https://github.com/adobecom/nala/blob/main/.github/workflows/) for daily run workflows \n  - Tests are run on following platerforms\n    - Linux OS ( ubuntu-latests) with browsers = [Chrome, Firefox, and WebKit]\n    - Windows OS ( windows-latests) with browsers = [Chrome, Firefox, and WebKit]\n    - Mac OS ( macos-latests) with browsers = [Chrome, Firefox, and WebKit]\n\n## 8: Nala wiki.\n\n  - Please refer [Nala onboarding wiki](https://github.com/adobecom/nala/wiki/Onboarding) for more information","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobecom%2Fnala","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadobecom%2Fnala","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadobecom%2Fnala/lists"}