[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PR9RQZ2P6G2SD6DQG1C97S":3,"skill-same:01M6PR9RQZ2P6G2SD6DQG1C97S":94},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":14,"repositoryHtmlUrl":62,"repositoryHomepageUrl":6,"ownerHtmlUrl":63,"ownerBlogUrl":64,"ownerDescription":6,"updatedAt":65,"install":66,"resources":79},"01M6PR9RQZ2P6G2SD6DQG1C97S","protractor-skill",null,"Generates Protractor E2E tests for Angular\u002FAngularJS apps in JS\u002FTS. 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\".","headmktlucca-ui\u002Fneuroads-lp","headmktlucca-ui","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F247379838?v=4","01M6PDVAV6M1W96D1SR1PDF8CS","NeuroAds","01M6PDVAZ4P281GNDKD45CYTF5",0,"MIT","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fprotractor-skill\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"protractor skill","e2e test","deprecated","recommend","for","apps","element","triggers","tests","e2e-testing","testing","use","model","e2e","angular","e2e tests","test","playwright","javascript","typescript","2026-11-10 10:12:30",false,"---\nname: protractor-skill\ndescription: >\n  Generates Protractor E2E tests for Angular\u002FAngularJS apps in JS\u002FTS.\n  NOTE: Protractor is officially deprecated — recommend Playwright or Cypress.\n  Use when user mentions \"Protractor\", \"element(by.model())\", \"Angular E2E\".\n  Triggers on: \"Protractor\", \"element(by.model)\", \"Angular E2E test\",\n  \"protractor.conf\".\nlanguages:\n  - JavaScript\n  - TypeScript\ncategory: e2e-testing\nlicense: MIT\nmetadata:\n  author: TestMu AI\n  version: \"1.0\"\n---\n\n# Protractor Automation Skill (Deprecated)\n\n> **Protractor reached end-of-life in 2023.** Angular team recommends Playwright or Cypress.\n\nFor TestMu AI cloud execution, see [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) and [shared\u002Ftestmu-cloud-reference.md](..\u002Fshared\u002Ftestmu-cloud-reference.md).\n\n## Core Patterns\n\n### Basic Test\n\n```javascript\ndescribe('Login', () => {\n  beforeEach(async () => {\n    await browser.get('\u002Flogin');\n  });\n\n  it('should login with valid credentials', async () => {\n    await element(by.model('email')).sendKeys('user@test.com');\n    await element(by.model('password')).sendKeys('password123');\n    await element(by.css('button[type=\"submit\"]')).click();\n    expect(await browser.getCurrentUrl()).toContain('\u002Fdashboard');\n    expect(await element(by.css('.welcome')).getText()).toContain('Welcome');\n  });\n\n  it('should show error for invalid credentials', async () => {\n    await element(by.model('email')).sendKeys('wrong@test.com');\n    await element(by.model('password')).sendKeys('wrong');\n    await element(by.css('button[type=\"submit\"]')).click();\n    expect(await element(by.css('.error')).isDisplayed()).toBe(true);\n  });\n});\n```\n\n### Angular-Specific Locators\n\n```javascript\nelement(by.model('ctrl.email'));                      \u002F\u002F ng-model\nelement(by.binding('ctrl.username'));                  \u002F\u002F Angular binding\nelement(by.exactBinding('ctrl.name'));                \u002F\u002F Exact binding\nelement(by.repeater('item in items'));                \u002F\u002F ng-repeat\nelement.all(by.repeater('item in items')).count();   \u002F\u002F Count repeater\nelement(by.cssContainingText('.item', 'Active'));     \u002F\u002F CSS + text\nelement(by.buttonText('Submit'));                      \u002F\u002F Button text\nelement(by.partialButtonText('Sub'));                  \u002F\u002F Partial text\n```\n\n### Page Objects\n\n```javascript\nclass LoginPage {\n  constructor() {\n    this.emailInput = element(by.model('email'));\n    this.passwordInput = element(by.model('password'));\n    this.loginButton = element(by.css('button[type=\"submit\"]'));\n    this.errorMessage = element(by.css('.error'));\n  }\n\n  async login(email, password) {\n    await this.emailInput.sendKeys(email);\n    await this.passwordInput.sendKeys(password);\n    await this.loginButton.click();\n  }\n}\n\n\u002F\u002F Usage\nconst loginPage = new LoginPage();\nawait loginPage.login('user@test.com', 'password123');\n```\n\n### protractor.conf.js\n\n```javascript\nexports.config = {\n  framework: 'jasmine',\n  seleniumAddress: 'http:\u002F\u002Flocalhost:4444\u002Fwd\u002Fhub',\n  specs: ['specs\u002F**\u002F*.spec.js'],\n  capabilities: { browserName: 'chrome' },\n  jasmineNodeOpts: { defaultTimeoutInterval: 30000 },\n  onPrepare: () => {\n    browser.waitForAngularEnabled(true);\n  }\n};\n```\n\n### Migration Guide\n\n| Protractor | Playwright |\n|-----------|------------|\n| `element(by.model('x'))` | `page.locator('[ng-model=\"x\"]')` |\n| `element(by.css('#id'))` | `page.locator('#id')` |\n| `browser.get(url)` | `page.goto(url)` |\n| `element.sendKeys(text)` | `locator.fill(text)` |\n| `browser.sleep(ms)` | `page.waitForTimeout(ms)` |\n| `browser.waitForAngular()` | Not needed (auto-wait) |\n\n\n### Cloud Execution on TestMu AI\n\nSet environment variables: `LT_USERNAME`, `LT_ACCESS_KEY`\n\n```javascript\n\u002F\u002F conf.js\nexports.config = {\n  seleniumAddress: `https:\u002F\u002F${process.env.LT_USERNAME}:${process.env.LT_ACCESS_KEY}@hub.lambdatest.com\u002Fwd\u002Fhub`,\n  capabilities: {\n    browserName: 'chrome',\n    'LT:Options': {\n      user: process.env.LT_USERNAME,\n      accessKey: process.env.LT_ACCESS_KEY,\n      build: 'Protractor Build',\n      name: 'Protractor Test',\n      platformName: 'Windows 11',\n      video: true,\n      console: true,\n      network: true,\n    },\n  },\n};\n```\n## Run: `npx protractor conf.js` (deprecated, use Playwright\u002FCypress instead)\n\n## Deep Patterns\n\nFor advanced patterns, debugging guides, CI\u002FCD integration, and best practices,\nsee `reference\u002Fplaybook.md`.\n","# Protractor Automation Skill (Deprecated)\n\n> **Protractor reached end-of-life in 2023.** Angular team recommends Playwright or Cypress.\n\nFor TestMu AI cloud execution, see [reference\u002Fcloud-integration.md](reference\u002Fcloud-integration.md) and [shared\u002Ftestmu-cloud-reference.md](..\u002Fshared\u002Ftestmu-cloud-reference.md).\n\n## Core Patterns\n\n### Basic Test\n\n```javascript\ndescribe('Login', () => {\n  beforeEach(async () => {\n    await browser.get('\u002Flogin');\n  });\n\n  it('should login with valid credentials', async () => {\n    await element(by.model('email')).sendKeys('user@test.com');\n    await element(by.model('password')).sendKeys('password123');\n    await element(by.css('button[type=\"submit\"]')).click();\n    expect(await browser.getCurrentUrl()).toContain('\u002Fdashboard');\n    expect(await element(by.css('.welcome')).getText()).toContain('Welcome');\n  });\n\n  it('should show error for invalid credentials', async () => {\n    await element(by.model('email')).sendKeys('wrong@test.com');\n    await element(by.model('password')).sendKeys('wrong');\n    await element(by.css('button[type=\"submit\"]')).click();\n    expect(await element(by.css('.error')).isDisplayed()).toBe(true);\n  });\n});\n```\n\n### Angular-Specific Locators\n\n```javascript\nelement(by.model('ctrl.email'));                      \u002F\u002F ng-model\nelement(by.binding('ctrl.username'));                  \u002F\u002F Angular binding\nelement(by.exactBinding('ctrl.name'));                \u002F\u002F Exact binding\nelement(by.repeater('item in items'));                \u002F\u002F ng-repeat\nelement.all(by.repeater('item in items')).count();   \u002F\u002F Count repeater\nelement(by.cssContainingText('.item', 'Active'));     \u002F\u002F CSS + text\nelement(by.buttonText('Submit'));                      \u002F\u002F Button text\nelement(by.partialButtonText('Sub'));                  \u002F\u002F Partial text\n```\n\n### Page Objects\n\n```javascript\nclass LoginPage {\n  constructor() {\n    this.emailInput = element(by.model('email'));\n    this.passwordInput = element(by.model('password'));\n    this.loginButton = element(by.css('button[type=\"submit\"]'));\n    this.errorMessage = element(by.css('.error'));\n  }\n\n  async login(email, password) {\n    await this.emailInput.sendKeys(email);\n    await this.passwordInput.sendKeys(password);\n    await this.loginButton.click();\n  }\n}\n\n\u002F\u002F Usage\nconst loginPage = new LoginPage();\nawait loginPage.login('user@test.com', 'password123');\n```\n\n### protractor.conf.js\n\n```javascript\nexports.config = {\n  framework: 'jasmine',\n  seleniumAddress: 'http:\u002F\u002Flocalhost:4444\u002Fwd\u002Fhub',\n  specs: ['specs\u002F**\u002F*.spec.js'],\n  capabilities: { browserName: 'chrome' },\n  jasmineNodeOpts: { defaultTimeoutInterval: 30000 },\n  onPrepare: () => {\n    browser.waitForAngularEnabled(true);\n  }\n};\n```\n\n### Migration Guide\n\n| Protractor | Playwright |\n|-----------|------------|\n| `element(by.model('x'))` | `page.locator('[ng-model=\"x\"]')` |\n| `element(by.css('#id'))` | `page.locator('#id')` |\n| `browser.get(url)` | `page.goto(url)` |\n| `element.sendKeys(text)` | `locator.fill(text)` |\n| `browser.sleep(ms)` | `page.waitForTimeout(ms)` |\n| `browser.waitForAngular()` | Not needed (auto-wait) |\n\n\n### Cloud Execution on TestMu AI\n\nSet environment variables: `LT_USERNAME`, `LT_ACCESS_KEY`\n\n```javascript\n\u002F\u002F conf.js\nexports.config = {\n  seleniumAddress: `https:\u002F\u002F${process.env.LT_USERNAME}:${process.env.LT_ACCESS_KEY}@hub.lambdatest.com\u002Fwd\u002Fhub`,\n  capabilities: {\n    browserName: 'chrome',\n    'LT:Options': {\n      user: process.env.LT_USERNAME,\n      accessKey: process.env.LT_ACCESS_KEY,\n      build: 'Protractor Build',\n      name: 'Protractor Test',\n      platformName: 'Windows 11',\n      video: true,\n      console: true,\n      network: true,\n    },\n  },\n};\n```\n## Run: `npx protractor conf.js` (deprecated, use Playwright\u002FCypress instead)\n\n## Deep Patterns\n\nFor advanced patterns, debugging guides, CI\u002FCD integration, and best practices,\nsee `reference\u002Fplaybook.md`.\n",{"name":5,"license":15,"category":36,"metadata":52,"languages":55,"description":58},{"author":53,"version":54},"TestMu AI","1.0",[56,57],"JavaScript","TypeScript","Generates Protractor E2E tests for Angular\u002FAngularJS apps in JS\u002FTS. 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\".\n","main","7a940b8e5af16c95e5c190a524421d32fc7445a9",".claude\u002Fskills\u002Fprotractor-skill","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui","https:\u002F\u002Fneuroads.com.br","2026-08-12 00:42:44",{"source":8,"skillName":5,"commands":67,"prompt":77,"zipAvailable":78},[68,71,74],{"tool":69,"command":70},"npx","npx skills add headmktlucca-ui\u002Fneuroads-lp --skill protractor-skill",{"tool":72,"command":73},"bunx","bunx skills add headmktlucca-ui\u002Fneuroads-lp --skill protractor-skill",{"tool":75,"command":76},"pnpm","pnpm dlx skills add headmktlucca-ui\u002Fneuroads-lp --skill protractor-skill","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fprotractor-skill\u002FSKILL.md",true,[80,86,90],{"path":81,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":84,"sourceHtmlUrl":85},"reference\u002Fadvanced-patterns.md","REFERENCE","参考文档",2217,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fprotractor-skill\u002Freference\u002Fadvanced-patterns.md",{"path":87,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":88,"sourceHtmlUrl":89},"reference\u002Fcloud-integration.md",1289,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fprotractor-skill\u002Freference\u002Fcloud-integration.md",{"path":91,"resourceType":82,"resourceTypeDesc":83,"sizeBytes":92,"sourceHtmlUrl":93},"reference\u002Fplaybook.md",14720,"https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fprotractor-skill\u002Freference\u002Fplaybook.md",[95,111,133,159,173,208],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":103,"publishedAt":47},"01M6PTDCZTXTGSTX4RFK901YSZ","xunit-skill","Generates xUnit.net tests in C#. Covers Fact\u002FTheory, constructor injection, IClassFixture, and FluentAssertions. Use when user mentions \"xUnit\", \"[Fact]\", \"[Theory]\", \"Assert.Equal\", \"C# xUnit\". Triggers on: \"xUnit\", \"[Fact]\", \"[Theory]\", \"Assert.Equal C#\", \"xUnit.net\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fxunit-skill\u002FSKILL.md",[101,102],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[104,105,37,106,107,38,35,34,108,109,110],"xunit","xunit skill","injection","user","unit","unit-testing","C#",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":119,"publishedAt":47},"01M6PTCB59ZTG5FTMWGPYEMMBP","xcuitest-skill","Generates XCUITest UI tests for iOS\u002FiPadOS apps in Swift. Apple's native testing framework for reliable, fast UI automation. Supports local simulators and TestMu AI cloud real devices. Use when user mentions \"XCUITest\", \"XCTest\", \"iOS UI test\", \"Swift test\", \"XCUIApplication\". Triggers on: \"XCUITest\", \"XCTest UI\", \"iOS UI test\", \"Swift UI test\", \"XCUIApplication\", \"TestMu\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fxcuitest-skill\u002FSKILL.md",[117,118],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[120,121,37,122,43,123,124,125,38,126,127,128,129,130,35,34,32,131,31,132],"xcuitest","xcuitest skill","automation","testing framework","ios","devices","mobile","mobile-testing","ui test","local","apple","native","objective",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":143,"publishedAt":47},"01M6PTATMNTY9NF4J7KSR76YK6","world-builder","Create and manage generative game zones for Dorothy's Pokemon-style world. Use this skill when creating, updating, or designing game worlds via MCP tools.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fworld-builder\u002FSKILL.md",[139,142],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[144,145,146,147,148,149,150,151,38,152,153,154,155,156,157,31,158],"builder","world","world builder","MCP","create","mcp tools","Tools","game","pokemon","manage","style","via","theme","zone","generative",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":167,"publishedAt":47},"01M6PT9Z92JTSQEHE1QR0NNW5F","webdriverio-skill","Generates WebdriverIO (WDIO) automation tests in JavaScript or TypeScript. Supports local and TestMu AI cloud. Use when user mentions \"WebdriverIO\", \"WDIO\", \"wdio.conf\", \"browser.url\", \"$\", \"$$\". Triggers on: \"WebdriverIO\", \"WDIO\", \"wdio\", \"browser.$\".","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwebdriverio-skill\u002FSKILL.md",[165,166],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[168,37,46,122,45,169,170,40,107,38,36,129,35,34,171,172],"webdriverio skill","browser","cloud","URL","conf",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":188,"publishedAt":47},"01M6PT9NVK36ZWCQ69YXK3FR4K","web-design-guidelines","Web platform design and accessibility guidelines. Use when building web interfaces, auditing accessibility, implementing responsive layouts, or reviewing web UI code. Triggers on tasks involving HTML, CSS, web components, WCAG compliance, responsive design, or web performance.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fweb\u002FSKILL.md",[179,182,183],{"categoryNo":180,"categoryName":181,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":184,"categoryName":185,"taxonomyType":186,"taxonomyTypeDesc":187},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,34,207],"design","web","guidelines","web design guidelines","web design","css","performance","components","web components","tasks","code","web performance","ui","platform design","html","responsive design","responsive","platform","implementing",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":216,"publishedAt":47},"01M6PT9A3JKRE3X34276F2FW5R","watchos-design-guidelines","Apple Human Interface Guidelines for Apple Watch. Use when building watchOS apps, complications, or workout features. Triggers on tasks involving Watch UI, Digital Crown, glanceable interfaces, or wrist-based interactions.","https:\u002F\u002Fgithub.com\u002Fheadmktlucca-ui\u002Fneuroads-lp\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwatchos\u002FSKILL.md",[214,215],{"categoryNo":140,"categoryName":141,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":184,"categoryName":185,"taxonomyType":186,"taxonomyTypeDesc":187},[189,191,217,198,201,38,218,219,130,206,220,34,32,221,31,222,223],"watchos design guidelines","workout","human","watch","interface","platform-design","features"]