{"_id":"@nodebug/browser-element-finder","_rev":"55-fe5304c8579a3283b77793460fb5c040","name":"@nodebug/browser-element-finder","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.8":{"name":"@nodebug/browser-element-finder","version":"1.0.8","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.0.8","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"89f8ed8cc41f1c19ff4c79cf2eb0d284d8381b69","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.0.8.tgz","fileCount":5,"integrity":"sha512-YHEFekEQF4VbvuftfO05O9FGGbseK2M4i/N1Ki6vC43xsuXWqLoDu018AaxY3vUlFBXS+riDFLzWJr6WJOH1Jw==","signatures":[{"sig":"MEUCIQD6t1wxs7gmhFKABleHO2nXhoUwnWARW+QZV2/EE9138QIgQnhZdPXnL1eukV3cSvorJMWDysVML5xG1BZafTT71ow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37548},"main":"index.js","type":"module","browser":"index.js","engines":{"node":">=24"},"exports":{".":{"import":"./index.js","browser":"./index.js","require":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","browser":"./src/element-definitions.json","default":"./src/element-definitions.json","require":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","browser":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json","require":"./src/searchable-attributes.json"}},"gitHead":"6e91d8844b4cb7dc02c8b5cc75055e1a36b0ef4a","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node build.js","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"nodebug","email":"nodebug@outlook.com"},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.12.1","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.0.0","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.0.8_1779385926350_0.1367729508019424","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@nodebug/browser-element-finder","version":"1.1.5","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.1.5","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"94437e8b3f5cb3efa0fbed6a1334d448395b6024","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.1.5.tgz","fileCount":6,"integrity":"sha512-lQo+bE9hIre+qHXp6HE+CBkF+RturNLIFA70ZWkT/bBdOoi11TbBLNRTUBG7CwoLAH2isVAvrGc2HYdL27MAUA==","signatures":[{"sig":"MEUCIFXXxWnSGyrHY/hua02r1qBpKn2KxklprWsAyy01xnxJAiEA8rC81qv1baaDmdTi27L1GZQRjssxWbWL4UxozYkb8js=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62937},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","browser":"./index.js","default":"./index.js","require":"./index.js"},"./min":{"import":"./index.min.js","browser":"./index.min.js","default":"./index.min.js","require":"./index.min.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","browser":"./src/element-definitions.json","default":"./src/element-definitions.json","require":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","browser":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json","require":"./src/searchable-attributes.json"}},"gitHead":"25664e5a6f6d763223645331d39eb822949beb33","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node build.js","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.16.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.0.0","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.1.5_1780056937491_0.8798756798676897","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@nodebug/browser-element-finder","version":"1.1.6","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.1.6","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"8d3102b50518d8558df6abc9347730d7b2726893","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.1.6.tgz","fileCount":6,"integrity":"sha512-E1JCgtWBODO1udQuwl4FF0MCKndRpN04G3vrP3ZykwhR50KfMeAJatLG0A/8PsKjEx50d3X35WLJGEC9vCIblg==","signatures":[{"sig":"MEUCIFMZusYxQg7bTC7lIH65Ft08PwsaBSZcwA0tzG1SczbFAiEA4uvgA0DVf1it8HsOU6vwvHjBcrWJaTKrRnLipjLuiXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64527},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","browser":"./index.js","default":"./index.js","require":"./index.js"},"./min":{"import":"./index.min.js","browser":"./index.min.js","default":"./index.min.js","require":"./index.min.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","browser":"./src/element-definitions.json","default":"./src/element-definitions.json","require":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","browser":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json","require":"./src/searchable-attributes.json"}},"gitHead":"7c71d4d8f2b63f472061c989afb2ae2f9b11149e","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node build.js","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.16.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.0.0","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.1.6_1780425185100_0.18987047025729353","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@nodebug/browser-element-finder","version":"1.1.7","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.1.7","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"00d4536e6101a06d1f3f741ea6564bf9a37269b4","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.1.7.tgz","fileCount":6,"integrity":"sha512-i+GnnTnB0oAcGmMzfw3UpUqRbCJ84K4IQxf+DDE6FfISwNMCte2e4S9NT7LaGkptUX1oQySNoNesI6Y5b6FF8g==","signatures":[{"sig":"MEUCIQD7mUw0HzEW18ukwc33UBjp6zogKmQM8AtBUjlXq2ogFwIgB+vyE3XDo5a8lVMx2DE4KZMEFAxo2IUMF3U0tLqSQu8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.1.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65011},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","browser":"./index.js","default":"./index.js","require":"./index.js"},"./min":{"import":"./index.min.js","browser":"./index.min.js","default":"./index.min.js","require":"./index.min.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","browser":"./src/element-definitions.json","default":"./src/element-definitions.json","require":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","browser":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json","require":"./src/searchable-attributes.json"}},"gitHead":"99243088f3f588a842c0a9390c84d5aeb53f456c","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node build.js","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.16.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.0.0","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.1.7_1780494042579_0.8329833228897272","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"@nodebug/browser-element-finder","version":"1.1.8","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.1.8","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"789422fed4bd0c602a9a9bc42f0dc3b72e1c383a","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.1.8.tgz","fileCount":6,"integrity":"sha512-wsKKqt7JNYHL6/vuYPSN6ARph7rSph/Ftu4Rpmsjbkl2ZuZP0+ne1F74RFSKcZBl5OuZPGIhY/sXafPNijMV9g==","signatures":[{"sig":"MEQCIE1/cS7tO2BEwLixYKmr2g0RLtdr4LrbVc9DgwLdhwyFAiBFaNexX9YY1RYylb2p+xciAtooD3IF/qHu/MZqgPLm8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.1.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":75242},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","browser":"./index.js","default":"./index.js","require":"./index.js"},"./min":{"import":"./index.min.js","browser":"./index.min.js","default":"./index.min.js","require":"./index.min.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","browser":"./src/element-definitions.json","default":"./src/element-definitions.json","require":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","browser":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json","require":"./src/searchable-attributes.json"}},"gitHead":"7f8ba2252129a4b612ee2023b434e4f7fb1a2098","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node build.js","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.16.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.{js,jsx,ts,tsx}":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.0.0","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.4","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.1.8_1780941662718_0.12164872640904356","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@nodebug/browser-element-finder","version":"1.1.9","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.1.9","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"67e92103ff5d03df40a18f7cbb59968b170e1ce5","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.1.9.tgz","fileCount":6,"integrity":"sha512-Gnltbr3iJz33gLyU0nKm2OIa7t/0SHcgDEFszHxafrxdtjPs/efQHx/UcBhGwjYvrS7NHWlC47ZLZMxAV3kngg==","signatures":[{"sig":"MEUCIQDRUJmmuGrHxaAnBFGJ4tc3K1Pf+D/t3ORxsIMbGQVJiQIgGAah397eVE9gf432aX1n3cYu0we3Y7cFkM04IScHYJ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.1.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":90293},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"c014d42da4f816e225564828292f2102872b1f9a","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.1.9_1781294508630_0.46721747323863716","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@nodebug/browser-element-finder","version":"1.2.0","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.0","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"b44ff7197faa42f99b1789fa4b53f3cc3c36e842","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.0.tgz","fileCount":7,"integrity":"sha512-p6GrrOzdt+038HQ8PkQO7HmzQR4H61HYRys+pKflGtumFO2qdNNPw0iSAVqcwBOlzV1BS0NewJQmXx09sL+QGQ==","signatures":[{"sig":"MEUCIQDhhjWtM9zivOlVU2w/GmbBLwPp7PJYmpYyf+DzP+ubEQIgHLyazy74vuIy6hMPPVpY46oQ76U0+1Lb3Z/f1kxO67Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":141317},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"9efc4b28611bdcc635571bc00820c9d5bc9ca5e6","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.0_1781294896215_0.5609908740832195","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@nodebug/browser-element-finder","version":"1.2.1","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.1","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"db78343397b0352b3dffd8f641011b0c62a77f2e","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.1.tgz","fileCount":7,"integrity":"sha512-9uhDvydpFbVv9CjZ9gXDnd8wdYP7nW34pRTqrzdh5RvFAZlslQbyH95qJIvs9NmjcXGzTe5TQchGRVEMRwBpqQ==","signatures":[{"sig":"MEUCIHDbtg/6dfQrm4osh6h7ERV/r49j6Ji3FlBstDkPcPTPAiEAkKrr3o1zWw8GUBtJvVGDTZjlGOVggcJ7JGAZ70Vekdw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":143923},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"bb6f58db63662186d81a260ac06d438c64d8bc77","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.1_1781371850252_0.8415034812627729","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@nodebug/browser-element-finder","version":"1.2.2","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.2","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"48a422e311e80845d3c4d1cb9eb9e3a20236bc86","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.2.tgz","fileCount":7,"integrity":"sha512-ymcL/3BLKyV4tUJeSS0J4R2TtI3mcH5hxEa6S3QspcfDV9zJAwDg30mq1BIDd23iz5y0u8eP/7Sxg1XccLMNvQ==","signatures":[{"sig":"MEUCIBBRLPI00Xyq2w1aUxbkfHLGwd737BJ79gOWXVph8tLHAiEAwiA1x9av/4QEUikmF0lis7xkHE3ZCK3bw+YdSYFYq4Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145109},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"7b22cfe9721990f8309be509233af20b88e0523c","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.2_1781386991424_0.34510370752127284","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@nodebug/browser-element-finder","version":"1.2.3","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.3","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"c375df97473f990ed8b6d38da95549eccfd4add8","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.3.tgz","fileCount":7,"integrity":"sha512-KfN4twn1hpg+eNUfq2NJXirv1x1u3IUFdozNq6aJ1HOCa0fY7hXlrZC+VEW58FwOmiAC7JDN6EOT5NFPu8T22Q==","signatures":[{"sig":"MEUCIQCA1UgPWfpBeN9ugWOoJaus8WLdeWrJmChXXGHRRT2DIwIgEs54c4R4BhYDIVv9i52TsrxIoplIBcXYZKOs/eYEa5M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144963},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"1c44cc59ab463e4343ae6209e8376466b29d3f26","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.3_1781456197145_0.38242049379544696","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@nodebug/browser-element-finder","version":"1.2.4","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.4","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"c41b8ed9e97e36fc200bb7ce66b823c543df32eb","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.4.tgz","fileCount":7,"integrity":"sha512-H4j1BQBH2w4bOigJ0OHSu6NOHgi+ULx6LkMC2rCIOWniuCnHWSktc+e53BWBhv6ZwZtF2eD7bmEvXZ0myKH1FA==","signatures":[{"sig":"MEUCIQDoxC5CZTgQOJhYV9g82+oO7ofVtkBzoNwMc8psqA0aZgIgQXFieu82TfV8E6FL5zRYzw0Kn9sKHIZIR66I/+Ihsnk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144676},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"8103d07142fa590a2196a1d190335a7582607307","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.4_1781464090778_0.1013164289588313","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@nodebug/browser-element-finder","version":"1.2.5","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.5","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"c6ffbf420370481702f45c3539cfc75763a34add","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.5.tgz","fileCount":7,"integrity":"sha512-AL6PW9uT1DwnWmhGQQf1nRT6gu877MlszOQ6Gp0Dwa8rujI7eHzmyKwaW01R15v21GNSD+vslqcvGJE5G2SxBw==","signatures":[{"sig":"MEUCIGu1/Ygpa4WWA2aOmXPZCBnIJp9rEs5kIemv+59yDp7tAiEAutXAKexvOln1M3u77FxknXX2vaAb5E6EkMwgUF1AzgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144784},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"ae1c757db423dbbf3871dbf9a7fda1684778346e","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.5_1781471110135_0.6992602189092842","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@nodebug/browser-element-finder","version":"1.2.6","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.6","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"a3ab17b499954cd5486223cbdf507b950619d554","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.6.tgz","fileCount":7,"integrity":"sha512-IW0Rl3vp4nlRB+73/dRg+m27/WKXE9az+VlVbTPQ/tipVndFqpYo4QFxdYwnS8sAhJOO/G2YGuw/YInJrK3cxA==","signatures":[{"sig":"MEUCIQDzOPLoJfx3OjIkpwfIMs0mKuKiZa9Js2qt88isubCq4AIgezLufSJI5gOjJwYD9P4rsVQeG0SfMXZ86+v3qWGkn54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":149978},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"05b57d2016f29eb161b1405b2b6518ee16890b3e","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.6_1781531089534_0.9408091591620287","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"@nodebug/browser-element-finder","version":"1.2.7","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.7","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"712528f85dd865679af8dfdc399cf38ea0a98f4e","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.7.tgz","fileCount":7,"integrity":"sha512-rJqm1APytglAcOiZeJ6aHdQTEJze/AyMRciT+5xTtYEcxr/K/npwwBrJUoyzaiwB9KcXkKsQlJsdaxguy0Vs4g==","signatures":[{"sig":"MEUCIFOmzjcoHs5oPVrqVyK2fGpx7OFxFwa+a4VdWgWrxf+TAiEAtdtWEzWBXGTkFK/zFgcWq29aDGk3dv046n0FJ01hS74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":153933},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"d81fb2ba45064e67bc3bae42b12e582932ec43f2","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.7_1781713317343_0.9806015651372577","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"@nodebug/browser-element-finder","version":"1.2.8","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.8","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"494ef0c4251d4ae33ad7f894d1e959abceb6731c","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.8.tgz","fileCount":7,"integrity":"sha512-BULhjfGxseB3hjLaINba0GIpedTCVjQUEF/1+8xkaQoqBrHWJL6YkiZpr9PrtCu9xvVshS/YQOeyFPRePHfH1w==","signatures":[{"sig":"MEYCIQD0P+JoMsNqlcjGcq56n0NpEqX8iPAuBWjcdQeeszh0VwIhANUPTMB41A38ZeBP7uJi1IZ7Ou2S+V3wdclwpmhAvJrl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":164830},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"1ec42882a20de72bd0c7de9c4695ac81e68cd571","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.8_1781896553383_0.8202494339347446","host":"s3://npm-registry-packages-npm-production"}},"1.2.9":{"name":"@nodebug/browser-element-finder","version":"1.2.9","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.2.9","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"02d583808538dc952ab187dbca2692f3eeaaa032","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.2.9.tgz","fileCount":7,"integrity":"sha512-xdII1Kv3OwamVm+H7l2GbdGiNh/0GAu/4VGDg7aGUCcpadt4k84Vq/t6mbBYaTXK+3hnxNBfYYIfusHtlLc66A==","signatures":[{"sig":"MEYCIQCMpmP4Z+c8QG73Bt/zRYY7tAL666ceTrKJl5M6i9ihZwIhAIV8z+SP9e5Y+aJyPEAsTOfBmfc918EnKN586S+kb/u2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":165047},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"f4f91dc083a2bf64a20d3c305d45760fc49861d1","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.2.9_1782150377898_0.9172318119951677","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@nodebug/browser-element-finder","version":"1.3.0","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.0","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"ac6b34de5fe60d658c950ba5ff99ba3960edac35","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.0.tgz","fileCount":7,"integrity":"sha512-2xEAVtOmBTag+6AX583AcApQ7p/U13+d6trEbFtY79+q4yD4vm7dArgE3Z1Hlk+naeVNkDnqixFHQ5C/+uIPng==","signatures":[{"sig":"MEUCIQDR1x/CLTbWJeJPt2fh/7yL1vMjxul9tcsADrrUaOJjWgIgZC6MBIgQshTDt8ripfTo3H27mB8aZl9vfA5IdPPSi6s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":163654},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"ec74dc34df174bbaf3f0272063823bcea2cd6460","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.0_1782166153282_0.6491462651324311","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@nodebug/browser-element-finder","version":"1.3.1","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.1","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"95322d39341a486c03a4bb70bc842dce1b5bc4b1","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.1.tgz","fileCount":7,"integrity":"sha512-CzocZMsW0ZNoDY7cTjD+N0eE3nGFJguEwzGgCHUN9gNlJtMikNtb+el+cEpL7K1QDRWs2NCQsBhCfMPomR/eLA==","signatures":[{"sig":"MEQCIFXgXzfIhUWKHlkgKFfht2BD5jHbMwTuI+/ydIHSmRL9AiBob0fbz2cN5hrGlUozCay8sw/BikuG9PZGfJSb/MEN+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":164278},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"25832ba5a7949191468e676c6289bcb03d59e898","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.1_1782167107301_0.9874457774432268","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@nodebug/browser-element-finder","version":"1.3.2","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.2","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"6dc6af5d2fd1b1fc5cc31cb1a55eb25680726661","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.2.tgz","fileCount":7,"integrity":"sha512-xGWIW7vvVZUnHiLt9qJcpgRrR/j1zUMGdb1dLNvg+Q/MfYJCE4RRVojkFAg14MFEcMARGcvjoi3nzdzLn8kQGw==","signatures":[{"sig":"MEUCIQCvI5st1ylVr64E5ID8vd8yzmv6ZNGOZMGBKdmhkLghqgIgTbVN6BG8uOfZmeW5p2ThSruCjG0Rn9yrgECPFIQ1yMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":167347},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"b7880fa305ca6987c44c0eb9f32d14b2db8c78e6","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.2_1782168182542_0.8206680034782476","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@nodebug/browser-element-finder","version":"1.3.3","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.3","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"12e12032b9350acf69bf15d04522b444a3d7c9be","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.3.tgz","fileCount":7,"integrity":"sha512-a0b/alplkNtjnpg1kMkP7LC9HDv3yLFxEtXO1x1iupVA4CtPSMnfyuDUsNy/Fk38yNdH+O7GHgjyDNVUCnxwQQ==","signatures":[{"sig":"MEUCIQDaFPVqCIg/37bbDjhBu67XZ6HyvqejcHb4j60yE7JANAIgV9JfftW3EhsP15G17SCXQVW0MNXNCba1Mu522H+hl3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":169505},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"cd2432a574a9625c2db56a1b4ff8f15aaa55130c","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.17.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.3_1782171597010_0.7617642322238414","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@nodebug/browser-element-finder","version":"1.3.4","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.4","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"cd90f48a29be85522d980034c6f753c51f235fdc","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.4.tgz","fileCount":7,"integrity":"sha512-CCTGOad+A8wjfyZcxhSqaWCDrA3Q7jGjQbzRiP9X6meWtUehX1Y8ikRgtYofeAXHSfOw/4J7cU6ICKqMNOwwlg==","signatures":[{"sig":"MEUCIQDM7ro/TbNWp51lA4uuOf9bXi4C6Rmuf51x8zWH+ZRgJQIgW3XdDTkD0kSli8PNH2L8XY2DCZxc2DJU8aVY2G+lHD0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178247},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"df55720106d750590556dd2cbc83ea072f83aab4","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.18.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.17.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.4_1782825155445_0.09441418888997344","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@nodebug/browser-element-finder","version":"1.3.5","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.5","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"78d8a5c792162c9f2f19aa7a57482aead4ec8fb7","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.5.tgz","fileCount":7,"integrity":"sha512-zgCwSoYuy11q9Cf5uuPcJKPFLwfXU6qxKlAUmfPGk+NuuJSBwOUNZI17dSsLgyH0xZlXwACreFgJ0xqFNYAdbQ==","signatures":[{"sig":"MEQCIHWJtIiDfE5BoWJFBu148ukgo+zhvG0xBAaRn8lpVsAnAiAsVqZEwDdACjxKtH/lzw3aUNReHu4o7KJTZmp8cG4LcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":181734},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"c399a85908472c7da864e7616500bfad61c0a648","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"11.18.0","description":"Browser Element Finder - Find elements by type and text content","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","jsdom":"^29.1.1","eslint":"^10.2.0","vitest":"^3.2.6","esbuild":"^0.28.0","globals":"^17.5.0","prettier":"^3.8.2","@eslint/js":"^10.0.1","lint-staged":"^16.4.0","selenium-webdriver":"^4.43.0","@vitest/coverage-v8":"^3.2.6","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.5_1783019102315_0.9917403593227467","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"@nodebug/browser-element-finder","version":"1.3.6","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.6","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"e9cc6792e71a08d8f09a90342624c0db31121273","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.6.tgz","fileCount":7,"integrity":"sha512-1xRE91NStK1R/ZEYJbdbaYQ3JNU0nFmjMxUgAPdN47Vy/bkGaCbFMupryIM1csesf7cwnYJXB7HZKJ/o0pZpOQ==","signatures":[{"sig":"MEUCIHT+7HrczPi0saSO6oFU9V0t5hqjamZkR0+33X2SiFpdAiEAvjxx+cTlaNjOMade5Lpg1bMHT06XR0tZhlvswu28c2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145610},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"ae4d54f616b89da09ded61cd87a0524986d70749","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"12.0.1","description":"Robust, agent-friendly JavaScript library for identifying DOM elements by semantic type and/or text content, with full support for shadow DOM, iframes, and browser automation workflows (Selenium, Playwright, Puppeteer).","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.8.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.8.0","prettier":"^3.9.6","@eslint/js":"^10.0.1","lint-staged":"^17.2.0","selenium-webdriver":"^4.46.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.6_1785267775640_0.6657924126314834","host":"s3://npm-registry-packages-npm-production"}},"1.3.7":{"name":"@nodebug/browser-element-finder","version":"1.3.7","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.7","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"efdab012d5ed5c70882830865361877fc57ecfbb","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.7.tgz","fileCount":7,"integrity":"sha512-wzlrFglv+KTJWqrSYTahmKNwpo2i3VvP5LetN5uBsv4h9WL90LGVbKSOiV4Yve9IBIA3/T1sREOlpg9qx8duFg==","signatures":[{"sig":"MEQCIDodDTcUSs9J+LyYJaNUJh7GI3hprk1PMYZN8L5313A+AiAfUkbRxsy0QBka2AxzIlNTVkM1fhCj8yIQwebPl4DfLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":146041},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"a7dbcd98902041392433a0a5635d9e7b21cbed29","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"12.0.1","description":"Robust, agent-friendly JavaScript library for identifying DOM elements by semantic type and/or text content, with full support for shadow DOM, iframes, and browser automation workflows (Selenium, Playwright, Puppeteer).","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.8.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.8.0","prettier":"^3.9.6","@eslint/js":"^10.0.1","lint-staged":"^17.2.0","selenium-webdriver":"^4.46.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.7_1785327871429_0.992675441243337","host":"s3://npm-registry-packages-npm-production"}},"1.3.8":{"name":"@nodebug/browser-element-finder","version":"1.3.8","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.8","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"03cf4c01013e0139bd6ba2766270e53df7fef1a2","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.8.tgz","fileCount":7,"integrity":"sha512-86/rOmc0jXyw0Uu04hj6iuVFdDevcyD5jiO2OIE1SMLv1I6GI0l0eMpdiI6+saa6Wtys4kwwTx0HISZR1FGX6A==","signatures":[{"sig":"MEYCIQDUA3x0PFEHruTgt/iEAaQ66ty+Qys4U5NDmbRX9N1PfgIhAJYeFxglNMNDTAB1Yd4zDEWSJASUcPJjabfGavN+990f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":146013},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"3f5716a8ffc243ad97015558666f4115b3265948","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"12.0.1","description":"Robust, agent-friendly JavaScript library for identifying DOM elements by semantic type and/or text content, with full support for shadow DOM, iframes, and browser automation workflows (Selenium, Playwright, Puppeteer).","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.8.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.8.0","prettier":"^3.9.6","@eslint/js":"^10.0.1","lint-staged":"^17.2.0","selenium-webdriver":"^4.46.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.8_1785349422102_0.591540416021088","host":"s3://npm-registry-packages-npm-production"}},"1.3.9":{"name":"@nodebug/browser-element-finder","version":"1.3.9","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"license":"MIT","_id":"@nodebug/browser-element-finder@1.3.9","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"dist":{"shasum":"4c1c998ba3fcb9c0c7b9504cc88c52681ea4d3da","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.3.9.tgz","fileCount":7,"integrity":"sha512-RtbagdIAb4CzCN5mF0eqWuzonWQkDVCFWB/KuNyvuTnkkpM+N+XX6qNS1ZpKBUAkS8+9zzlh6utjZfUoyadTHA==","signatures":[{"sig":"MEUCIQCKCzLZmFZXyfCxXmJNNjKKDY7tJriC9K6zyK1n05WbSgIgEN1RqWBgGa7n2ESl8PJPJWDLN2M2v8Uhq+EJNxO+HiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.3.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":146036},"type":"module","engines":{"node":">=24"},"exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./min":{"default":"./index.min.js"},"./browser":{"default":"./index.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"gitHead":"078c0503919c31662515720018ca9ca9a22bb0b9","scripts":{"lint":"eslint .","test":"npm run build && vitest run","build":"node scripts/build.js","prepack":"npm run build","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"repository":{"url":"git+https://github.com/node-bug/browser-element-finder.git","type":"git"},"_npmVersion":"12.0.1","description":"Robust, agent-friendly JavaScript library for identifying DOM elements by semantic type and/or text content, with full support for shadow DOM, iframes, and browser automation workflows (Selenium, Playwright, Puppeteer).","directories":{},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"husky":"^9.1.7","eslint":"^10.8.0","vitest":"^4.1.10","esbuild":"^0.28.1","globals":"^17.8.0","prettier":"^3.9.6","@eslint/js":"^10.0.1","lint-staged":"^17.2.0","selenium-webdriver":"^4.46.0","@vitest/coverage-v8":"^4.1.10","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/browser-element-finder_1.3.9_1785352223129_0.4983406512025286","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@nodebug/browser-element-finder","version":"1.4.0","description":"Robust, agent-friendly JavaScript library for identifying DOM elements by semantic type and/or text content, with full support for shadow DOM, iframes, and browser automation workflows (Selenium, Playwright, Puppeteer).","exports":{".":{"import":"./src/element-finder.js","default":"./src/element-finder.js"},"./browser":{"default":"./index.js"},"./min":{"default":"./index.min.js"},"./inventory":{"import":"./src/element-inventory.js","default":"./src/element-inventory.js"},"./inventory-browser":{"default":"./inventory.js"},"./inventory-min":{"default":"./inventory.min.js"},"./element-definitions.json":{"import":"./src/element-definitions.json","default":"./src/element-definitions.json"},"./searchable-attributes.json":{"import":"./src/searchable-attributes.json","default":"./src/searchable-attributes.json"}},"type":"module","engines":{"node":">=24"},"keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"repository":{"type":"git","url":"git+https://github.com/node-bug/browser-element-finder.git"},"homepage":"https://github.com/node-bug/browser-element-finder#readme","bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"scripts":{"build":"node scripts/build.js","prepack":"npm run build","lint":"eslint .","test":"npm run build && vitest run","test:watch":"npm run build && vitest","test:coverage":"npm run build && vitest run --coverage","prepare":"husky && echo 'npx lint-staged' > .husky/pre-commit && chmod +x .husky/pre-commit"},"devDependencies":{"@eslint/js":"^10.0.1","@vitest/coverage-v8":"^4.1.10","esbuild":"^0.28.1","eslint":"^10.8.0","eslint-config-prettier":"^10.1.8","globals":"^17.8.0","husky":"^9.1.7","lint-staged":"^17.2.0","prettier":"^3.9.6","selenium-webdriver":"^4.46.0","vitest":"^4.1.10"},"lint-staged":{"*.js":["eslint --fix"],"*.{json,yaml,yml,md,sh,groovy}":["prettier --write"]},"license":"MIT","gitHead":"818b8db0caeae9868cc4394236cf6363c8da3325","_id":"@nodebug/browser-element-finder@1.4.0","_nodeVersion":"24.18.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-Tn6fZzaw8VrwXbkFSo9GrPwD1Kk5nb+AcTKvZ3x1/IA0lYH0aqiOcgjNF1e+Zho5G+EZHz95Ho0HdeomxE05mw==","shasum":"3de9b8945cb652c56a55de0a9d9f1745c5626eaf","tarball":"https://registry.npmjs.org/@nodebug/browser-element-finder/-/browser-element-finder-1.4.0.tgz","fileCount":10,"unpackedSize":184927,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@nodebug%2fbrowser-element-finder@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCzxXUT7oWHmUrR0aPnxsSGfQU1zRGhiL09X8IH6uLMiAIhANVlPyAbmwKh53h4u3Aq7NvXMOFOjK2vXNbo3G3vzCVO"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c6e16ba3-a7f0-4621-b8e9-88929530adae"}},"directories":{},"maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/browser-element-finder_1.4.0_1785606991012_0.5304504533417951"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-17T18:42:18.014Z","modified":"2026-08-01T17:56:31.466Z","1.0.0":"2026-05-17T18:42:18.221Z","1.0.1":"2026-05-17T20:03:07.609Z","1.0.2":"2026-05-17T22:13:06.933Z","1.0.3":"2026-05-19T19:37:11.978Z","1.0.4":"2026-05-19T22:23:44.190Z","1.0.5":"2026-05-19T22:54:56.043Z","1.0.6":"2026-05-20T09:29:54.542Z","1.0.7":"2026-05-20T09:48:58.604Z","1.0.8":"2026-05-21T17:52:06.511Z","1.0.9":"2026-05-25T16:16:56.842Z","1.1.0":"2026-05-25T22:42:50.743Z","1.1.1":"2026-05-28T07:43:01.875Z","1.1.2":"2026-05-28T09:47:44.037Z","1.1.3":"2026-05-28T16:56:59.294Z","1.1.4":"2026-05-28T18:37:54.255Z","1.1.5":"2026-05-29T12:15:37.644Z","1.1.6":"2026-06-02T18:33:05.241Z","1.1.7":"2026-06-03T13:40:42.702Z","1.1.8":"2026-06-08T18:01:02.854Z","1.1.9":"2026-06-12T20:01:48.778Z","1.2.0":"2026-06-12T20:08:16.355Z","1.2.1":"2026-06-13T17:30:50.373Z","1.2.2":"2026-06-13T21:43:11.572Z","1.2.3":"2026-06-14T16:56:37.292Z","1.2.4":"2026-06-14T19:08:11.003Z","1.2.5":"2026-06-14T21:05:10.274Z","1.2.6":"2026-06-15T13:44:49.682Z","1.2.7":"2026-06-17T16:21:57.477Z","1.2.8":"2026-06-19T19:15:53.530Z","1.2.9":"2026-06-22T17:46:18.025Z","1.3.0":"2026-06-22T22:09:13.447Z","1.3.1":"2026-06-22T22:25:07.462Z","1.3.2":"2026-06-22T22:43:02.682Z","1.3.3":"2026-06-22T23:39:57.155Z","1.3.4":"2026-06-30T13:12:35.572Z","1.3.5":"2026-07-02T19:05:02.458Z","1.3.6":"2026-07-28T19:42:55.770Z","1.3.7":"2026-07-29T12:24:31.636Z","1.3.8":"2026-07-29T18:23:42.247Z","1.3.9":"2026-07-29T19:10:23.274Z","1.4.0":"2026-08-01T17:56:31.158Z"},"bugs":{"url":"https://github.com/node-bug/browser-element-finder/issues"},"license":"MIT","homepage":"https://github.com/node-bug/browser-element-finder#readme","keywords":["selenium","webdriver","element-finder","browser-automation","testing"],"repository":{"type":"git","url":"git+https://github.com/node-bug/browser-element-finder.git"},"description":"Robust, agent-friendly JavaScript library for identifying DOM elements by semantic type and/or text content, with full support for shadow DOM, iframes, and browser automation workflows (Selenium, Playwright, Puppeteer).","maintainers":[{"name":"nodebug","email":"nodebug@outlook.com"}],"readme":"# @nodebug/browser-element-finder\n\n**Version**: 1.4.0\n\n**A robust, agent-friendly JavaScript library for identifying DOM elements by semantic type and/or text content, with full support for shadow DOM and browser automation workflows (Selenium, Playwright, Puppeteer). Search results traverse all same-origin frames; however, because DOM nodes cannot be serialized across frame boundaries, elements inside iframes are returned with their `frameIndex` but without a direct `element` reference.**\n\nThis package provides two modules:\n\n| Module        | Export Path                            | Global (browser)   | Purpose                                    |\n| ------------- | -------------------------------------- | ------------------ | ------------------------------------------ |\n| **Finder**    | `.` or `./browser`                     | `ElementFinder`    | Find elements by type, text, or both       |\n| **Inventory** | `./inventory` or `./inventory-browser` | `ElementInventory` | Generate a full serializable DOM inventory |\n\n---\n\n## Quickstart for Agents & Automation\n\nInject the library and find elements in any browser context (Selenium, Playwright, Puppeteer, or browser console):\n\n```js\n// Find all buttons (type-only search)\nconst results = ElementFinder.findElements({ type: 'button' })\n\n// Find a button by text (substring match, combined type+text)\nconst results = ElementFinder.findElements({ type: 'button', text: 'Submit' })\n\n// Find by text only (any type)\nconst results = ElementFinder.findElements({ text: 'Search Term' })\n\n// Find in all same-origin frames (iframe elements are returned without an `element` reference)\nconst results = ElementFinder.findElements({ type: 'button' })\n\n// Find with fallback to nearby elements (e.g., label next to input)\nconst results = ElementFinder.findProbableElements({\n  type: 'button',\n  text: 'Click Me',\n})\n\n// Highlight found elements\nElementFinder.highlight(results.elements.map((e) => e.element))\n\n// Remove highlight\nElementFinder.unhighlight(results.elements.map((e) => e.element))\n\n// Check element properties\nresults.elements.forEach((e) => {\n  console.log('Tag:', e.tagName, 'Frame:', e.frameIndex)\n})\n```\n\n**Agent/Automation Best Practices**:\n\n- **Iframe Handling**: Results traverse all same-origin frames. Elements inside iframes are returned with their `frameIndex` (`0, 1, …`) but without an `element` reference due to serialization limits.\n- **Interacting with Iframes**: To get interactable `element` references for iframe contents, switch the driver context into the iframe first, then run the finder inside that frame.\n- **Discovery**: Use `getValidTypes()` to enumerate all supported semantic types and `getSearchableAttributes()` to see which attributes are searched for text.\n\n---\n\n## Features\n\n- **Type-based element finding**: Find elements by semantic type (button, textbox, link, dropdown, etc.)\n- **Text content search**: Search within element text, attributes, and placeholders\n- **Shadow DOM support**: Automatically traverses shadow roots to find nested elements\n- **Iframe support**: Traverses all same-origin frames; elements inside iframes are returned with their `frameIndex` but without an `element` reference (due to cross-frame serialization limits).\n- **Visibility detection**: All elements returned with `isHidden` property (`true`/`false`)\n- **Bounding box data**: Returns position and dimensions for each found element\n- **XPath-like type definitions**: Extensible element type matching using XPath-like expressions\n- **Optimized performance**: Pre-compiled type matchers, O(n) innermost element filtering, and efficient Set-based lookups\n\n## Performance Optimizations\n\nThe library includes several performance improvements:\n\n- **Pre-compiled type matchers**: Type definitions are compiled into cached matcher functions at module load time, avoiding XPath re-parsing for every element\n- **O(n) innermost element filtering**: Set-based lookups instead of nested loops\n- **Map-based column expansion**: O(1) element-to-column-position lookups for table cells\n- **Optimized text content matching**: Direct text node iteration instead of expensive textContent calls\n- **Loop optimizations**: Traditional for-loops with cached array lengths for hot paths\n\n## Installation\n\n```bash\nnpm install @nodebug/browser-element-finder\n```\n\n## Project Structure\n\n```\nbrowser-element-finder/\n├── src/\n│   ├── element-finder.js          # Main canonical finder implementation\n│   ├── element-inventory.js       # DOM inventory generator\n│   ├── element-definitions.json   # XPath-like type definitions\n│   └── searchable-attributes.json # Attributes searched for text matching\n├── scripts/\n│   └── build.js                   # esbuild IIFE bundler for browser injection\n├── tests/\n│   ├── integration/               # Integration tests (Selenium + Chrome)\n│   └── fixtures/                  # HTML test pages\n├── index.js                       # Built Finder IIFE bundle (browser entry point)\n├── index.min.js                   # Minified Finder IIFE bundle\n├── inventory.js                   # Built Inventory IIFE bundle\n├── inventory.min.js               # Minified Inventory IIFE bundle\n└── coverage/                      # Test coverage reports\n```\n\n## Usage Examples\n\n### In Browser Console or Automation Script\n\n```js\n// Find all elements (visible and hidden)\nconst results = ElementFinder.findElements({ type: 'button' })\n// Find by type and text\nconst results = ElementFinder.findElements({ type: 'button', text: 'Submit' })\n// Find by text only\nconst results = ElementFinder.findElements({ text: 'Search Term' })\n// Check visibility of found elements\nresults.elements.forEach((e) => {\n  console.log('Hidden:', e.isHidden)\n})\n```\n\n## Working with Iframes (Agent Pattern)\n\nThe library traverses **all same-origin frames**. Elements inside iframes **are** returned, but their `element` reference is `undefined` because a DOM node cannot be serialized across the frame boundary. To get interactable `element` references for iframe contents, switch into the iframe context first, then run the finder inside that frame.\n\n- **Main frame**: `item.frameIndex === -1` and `item.element` is available for direct interaction.\n- **Iframe**: iframe elements are returned with `frameIndex >= 0` and `item.element === undefined`. Switch context, then re-run the finder inside the iframe to get interactable elements.\n\n**Example**:\n\n```js\n// Run inside the main document\nconst results = ElementFinder.findElements({ type: 'button' })\nfor (const item of results.elements) {\n  if (item.frameIndex === -1 && item.element) {\n    // Interact directly\n    item.element.click()\n  }\n}\n\n// To search inside an iframe, switch context first (driver-specific),\n// then run the finder again within that frame.\n```\n\n### Customizing Searchable Attributes\n\nYou can customize which attributes the library searches for text (e.g., adding a custom `data-test-id` or removing `placeholder`).\n\n```js\n// Get current attributes\nconst currentAttrs = ElementFinder.getSearchableAttributes()\n\n// Set new priority list\nElementFinder.setSearchableAttributes([\n  'id',\n  'name',\n  'data-testid',\n  'placeholder',\n])\n```\n\n### Pausing Animations for Screenshots\n\nWhen taking screenshots or performing visual assertions, animations can cause flaky tests. Use `pauseAnimations()` and `resumeAnimations()` to freeze and restore animations:\n\n```js\n// Pause all CSS animations and transitions\nconst pauseState = ElementFinder.pauseAnimations()\n\n// Take screenshot or perform visual assertions\n// ... screenshot code here ...\n\n// Resume animations\nElementFinder.resumeAnimations(pauseState)\n```\n\nFor Selenium WebDriver tests, call the functions directly in the browser context:\n\n```js\n// Pause animations (state is stored internally in browser)\nawait driver.executeScript('return ElementFinder.pauseAnimations()')\n\n// ... take screenshot ...\n\n// Resume animations (pops from internal stack - no argument needed)\nawait driver.executeScript('ElementFinder.resumeAnimations()')\n```\n\n### Accessing Element Definitions and Searchable Attributes\n\nThe package exports JSON files containing element type definitions and searchable attributes:\n\n```javascript\n// ESM - Import JSON directly\nimport ELEMENT_DEFINITIONS from '@nodebug/browser-element-finder/element-definitions.json' with { type: 'json' }\nimport SEARCHABLE_ATTRIBUTES from '@nodebug/browser-element-finder/searchable-attributes.json' with { type: 'json' }\n\n// Get all valid element types\nconsole.log(Object.keys(ELEMENT_DEFINITIONS)) // ['link', 'navigation', 'heading', 'button', ...]\n\n// Get searchable attributes\nconsole.log(SEARCHABLE_ATTRIBUTES) // ['name', 'aria-label', 'aria-labelledby', 'aria-placeholder', 'aria-valuetext', 'aria-description', 'placeholder', 'hint', 'title', 'tooltip', 'alt', 'data-value', 'data-test-id', 'data-testid', 'id', 'resource-id', 'src', 'value']\n```\n\nThe package is ESM-only (`\"type\": \"module\"`), so CommonJS `require()` examples are not supported.\n\n---\n\n## Element Inventory\n\nThe **Inventory** module generates a flat, JSON-serializable list of every DOM element with its semantic type, bounding box, visibility state, and user-facing text. It is designed for AI agents that need a complete snapshot of the page before deciding which elements to interact with.\n\n### Installation\n\n```bash\nnpm install @nodebug/browser-element-finder\n```\n\n### Usage\n\n```javascript\n// Node / ESM\nimport { getElementInventory } from '@nodebug/browser-element-finder/inventory'\nconst inventory = getElementInventory()\nconsole.log(JSON.stringify(inventory, null, 2))\n\n// Browser (inject both bundles — inventory depends on the finder bundle)\nawait driver.executeScript(fs.readFileSync('./index.min.js', 'utf8'))\nawait driver.executeScript(fs.readFileSync('./inventory.min.js', 'utf8'))\nconst inventory = await driver.executeScript(\n  'return ElementInventory.getElementInventory()',\n)\n```\n\n### Identifiable Text Hierarchy\n\nEach element gets a short `identifiableText` string, chosen from a 6-tier priority:\n\n| Priority | Source                                                                   | Example              |\n| -------- | ------------------------------------------------------------------------ | -------------------- |\n| 1        | **Visible text** (direct text nodes)                                     | `\"Submit\"`           |\n| 2        | **Associated `<label>`** (`for` attribute or wrapping)                   | `\"Username\"`         |\n| 3        | **ARIA `aria-labelledby`**                                               | `\"Search field\"`     |\n| 4        | **User-facing attributes** (`aria-label`, `placeholder`, `title`, `alt`) | `\"Enter email\"`      |\n| 5        | **Data attributes** (`data-testid`, `data-test-id`, `id`, `name`)        | `\"login-submit-btn\"` |\n| 6        | **Machine identifiers** (`class`, `src`, `type`)                         | `\"btn btn-primary\"`  |\n\nText is truncated to **50 characters** maximum. Elements inside `<script>` or `<style>` are always skipped.\n\n### Return Format\n\n```javascript\n{\n  elements: [\n    {\n      type: 'button', // semantic type from element-definitions.json\n      tagName: 'BUTTON', // element.tagName.toUpperCase()\n      boundingBox: {\n        // from ElementFinder.getBoundingBox()\n        x,\n        y,\n        width,\n        height,\n        top,\n        bottom,\n        left,\n        right,\n        midx,\n        midy,\n        tagName,\n      },\n      inViewport: true, // intersects visual viewport\n      isHidden: false, // display:none, visibility:hidden, hidden attr, inert, or zero size\n      frameIndex: -1, // -1 = main frame, >= 0 = iframe index\n      identifiableText: 'Submit', // user-facing text (6-tier hierarchy, max 50 chars)\n    },\n  ]\n}\n```\n\n### Options\n\n| Option   | Type              | Default                 | Description                  |\n| -------- | ----------------- | ----------------------- | ---------------------------- |\n| `parent` | `Element \\| null` | `null` (whole document) | Scope inventory to a subtree |\n\n---\n\n## API Summary\n\n| Function                              | Description                                                                                               |\n| ------------------------------------- | --------------------------------------------------------------------------------------------------------- |\n| `findElements(options)`               | Find elements by type/text across all same-origin frames, returns `{ elements: [...] }`                   |\n| `findElementsByType(options)`         | Find elements by type only across all same-origin frames, returns `{ elements: [...] }`                   |\n| `findElementsByAttribute(options)`    | Find elements by text/attribute across all same-origin frames, returns `{ elements: [...] }`              |\n| `findProbableElements(options)`       | Find elements with fallback to nearby elements, returns `{ elements: [...] }`                             |\n| `getElementInventory(options)`        | Generate a flat JSON-serializable inventory of all DOM elements (Inventory module)                        |\n| `highlight(elements, color, width)`   | Highlight elements with outline                                                                           |\n| `unhighlight(elements)`               | Remove highlight                                                                                          |\n| `pauseAnimations()`                   | Pause all CSS animations and transitions, returns state object                                            |\n| `resumeAnimations(state)`             | Resume animations using state from `pauseAnimations()`                                                    |\n| `getValidTypes()`                     | List all supported element types                                                                          |\n| `getBoundingBox(element)`             | Get bounding box for an element                                                                           |\n| `setSearchableAttributes(attributes)` | Set custom attributes for text search                                                                     |\n| `getSearchableAttributes()`           | Get current searchable attributes                                                                         |\n| `setIgnoredTags(tags)`                | Set tags to ignore during traversal                                                                       |\n| `getIgnoredTags()`                    | Get current ignored tags                                                                                  |\n| `addIgnoredTags(tags)`                | Add tags to the ignored list                                                                              |\n| `removeIgnoredTags(tags)`             | Remove tags from the ignored list                                                                         |\n| `matchesType(el, type)`               | Check if element matches a type                                                                           |\n| `matchesAttribute(el, value, exact)`  | Check if element matches text/attribute                                                                   |\n| `getAllElements(root)`                | Get all elements (with shadow DOM)                                                                        |\n| `getAllFrames(root)`                  | Get all frames (main + iframes)                                                                           |\n| `parseXPath(expr, el, depth)`         | Parse XPath-like type expressions                                                                         |\n| `parseCondition(expr, el, depth)`     | Parse XPath condition expressions (e.g., `@type='checkbox'`)                                              |\n| `splitByOperator(expr, op)`           | Split XPath by operator                                                                                   |\n| `ELEMENT_DEFINITIONS`                 | Frozen object of all element type → XPath expression mappings                                             |\n| `inViewport(el, options)`             | Check if element intersects the visual viewport (sync)                                                    |\n| `isHidden(el)`                        | Check if element is hidden (display:none, visibility:hidden, hidden attribute, inert, or zero dimensions) |\n\n---\n\n### Ignored Tags\n\nElements under ignored tags are skipped during traversal and are not matched by text search. By default, ignored tags are `SCRIPT`, `STYLE`, `TEMPLATE`, `NOSCRIPT`, and `HEAD`.\n\n```javascript\nElementFinder.getIgnoredTags()\n// ['HEAD', 'NOSCRIPT', 'SCRIPT', 'STYLE', 'TEMPLATE']\n\nElementFinder.addIgnoredTags(['META', 'LINK'])\nElementFinder.removeIgnoredTags(['TEMPLATE'])\nElementFinder.setIgnoredTags(['SCRIPT', 'STYLE'])\n```\n\nTag names are case-insensitive.\n\n---\n\n### `findElements(options)`\n\nFinds elements matching the specified type and/or text. Combines type and attribute matching in a single call. Traverses all same-origin frames (iframe elements are returned without an `element` reference).\n\n| Parameter        | Type      | Default | Description                                                                                                                     |\n| ---------------- | --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| `options.type`   | `string`  | `null`  | Element type (see supported types below). If `null` or `undefined`, matches any type. Throws `TypeError` for non-string values. |\n| `options.text`   | `string`  | `''`    | Text to search for in content/attributes. If `null`/`''`/`undefined`, matches any text.                                         |\n| `options.exact`  | `boolean` | `false` | Exact text match vs substring (only used when text is provided)                                                                 |\n| `options.parent` | `Element` | `null`  | Parent element to search within                                                                                                 |\n\n**Returns**: `{ elements: [{ element, boundingBox, tagName, frameIndex, isHidden, inViewport }] }`\n\n- `element`: Raw DOM element for main-frame matches; `undefined` for iframe elements (cross-frame boundary)\n- `frameIndex`: `-1` for main frame, `0+` for iframes\n- `isHidden`: `true` if element is hidden (display:none, visibility:hidden, hidden attribute, inert, or zero dimensions)\n- `inViewport`: `true` if any portion of the element intersects the visual viewport\n\n**Agent/Automation Note**: Results traverse all same-origin frames. Elements inside iframes are returned with their `frameIndex` but without an `element` reference, because a DOM node cannot be serialized across the frame boundary. Switch into the iframe context and re-run the finder to get interactable `element` references for iframe contents.\n\n### `findProbableElements(options)`\n\nFinds elements matching the specified type with intelligent fallback to nearby elements. This function first attempts a direct match (element contains both type and text), then falls back to finding elements of the specified type near elements that match the text.\n\n**Use Case**: When UI patterns separate content from interactive elements (e.g., a label with text \"Email\" next to an input field), `findProbableElements` will find the input even though the text isn't inside it.\n\n| Parameter        | Type      | Default | Description                                                                                                                       |\n| ---------------- | --------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- |\n| `options.type`   | `string`  | `null`  | Element type (see supported types below). If `null`/`undefined`/`''`, matches any type. Throws `TypeError` for non-string values. |\n| `options.text`   | `string`  | `null`  | Text to search for in content/attributes. If `null`/`undefined`/`''`, matches any text. Throws `TypeError` for non-string values. |\n| `options.exact`  | `boolean` | `false` | Exact text match vs substring (only used when text is provided)                                                                   |\n| `options.parent` | `Element` | `null`  | Parent element to search within                                                                                                   |\n\n**Returns**: `{ elements: [{ element, boundingBox, tagName, frameIndex, isHidden, inViewport }] }`\n\n**Behavior**:\n\n- If only `type` is provided: delegates to `findElements({ type, parent })`\n- If only `text` is provided: delegates to `findElementsByAttribute({ value: text, exact, parent })`\n- If both are provided: first attempts a strict combined match (element must satisfy BOTH type and text/attribute). If no direct match is found, falls back to finding elements of the specified type near elements that match the text.\n\n**Fallback Strategy**: When no element matches both type and text directly, searches for nearby elements in this order:\n\n1. Parent elements (walk up the DOM tree)\n2. Sibling elements (same parent)\n3. Child elements (descendants)\n\n**Example**:\n\n```javascript\n// Type-only search (delegates to findElementsByType)\nconst result1 = ElementFinder.findProbableElements({ type: 'button' })\n// Returns all buttons on the page\n\n// Text-only search (delegates to findElementsByAttribute)\nconst result2 = ElementFinder.findProbableElements({ text: 'Submit' })\n// Returns all elements containing \"Submit\"\n\n// Direct match - element contains text\nconst result3 = ElementFinder.findProbableElements({\n  type: 'button',\n  text: 'Submit',\n})\n// Returns button with text \"Submit\" inside it\n\n// Fallback match - text in nearby element\nconst result4 = ElementFinder.findProbableElements({\n  type: 'textbox',\n  text: 'Email',\n})\n// Returns input element when \"Email\" text is in a nearby label\n\n// Fallback match - text in parent\nconst result5 = ElementFinder.findProbableElements({\n  type: 'button',\n  text: 'Menu Item 1',\n})\n// Returns button when \"Menu Item 1\" is in a child span\n```\n\n**When to use**:\n\n- Use `findElements` when you need strict matching (element must contain the text)\n- Use `findProbableElements` when text might be in a nearby element (labels, icons, wrappers)\n- Both functions traverse all same-origin frames; iframe elements are returned without an `element` reference\n\n### `highlight(elements, color, width)`\n\nHighlights elements on the page with a colored outline.\n\n| Parameter  | Type     | Default | Description             |\n| ---------- | -------- | ------- | ----------------------- |\n| `elements` | `Array`  | -       | Elements to highlight   |\n| `color`    | `string` | `'red'` | Outline color           |\n| `width`    | `number` | `3`     | Outline width in pixels |\n\n### `unhighlight(elements)`\n\nRemoves highlighting from elements.\n\n### `getValidTypes()`\n\nReturns an array of all valid element type names.\n\n### `getBoundingBox(element)`\n\nReturns the bounding box for an element.\n\n### `setSearchableAttributes(attributes)`\n\nSets custom searchable attributes.\n\n### `getSearchableAttributes()`\n\nReturns the current searchable attributes array.\n\n### `matchesType(el, type)`\n\nChecks if an element matches the specified type definition.\n\n### `matchesAttribute(el, value, exact)`\n\nChecks if an element matches the specified text/attribute value. Safely handles edge case elements that may throw errors on attribute access.\n\n### `findElementsByType(options)`\n\nFinds elements by type only. Traverses all same-origin frames (iframe elements are returned without an `element` reference).\n\n| Parameter        | Type      | Default     | Description                                                                         |\n| ---------------- | --------- | ----------- | ----------------------------------------------------------------------------------- |\n| `options.type`   | `string`  | `\"element\"` | Element type (see supported types below). Throws `TypeError` for non-string values. |\n| `options.parent` | `Element` | `null`      | Parent element to search within                                                     |\n\n### `findElementsByAttribute(options)`\n\nFinds elements by text/attribute value only. Traverses all same-origin frames (iframe elements are returned without an `element` reference).\n\n| Parameter        | Type      | Default | Description                                                                                        |\n| ---------------- | --------- | ------- | -------------------------------------------------------------------------------------------------- |\n| `options.value`  | `string`  | `''`    | Text/attribute value to search for. If `null`/`undefined`, defaults to empty string (matches all). |\n| `options.exact`  | `boolean` | `false` | Exact text match vs substring                                                                      |\n| `options.parent` | `Element` | `null`  | Parent element to search within                                                                    |\n\n### `getAllElements(root)`\n\nGets all elements including shadow DOM contents.\n\n### `getAllFrames(root)`\n\nGets all frames (main document + iframes) in the window. Returns array with `frameIndex` (-1 for main, 0+ for iframes). Cross-origin iframes (SecurityError) are automatically skipped with a specific warning message, while other errors are logged separately.\n\n### `inViewport(el, options)`\n\nChecks if an element intersects the visual viewport. Uses synchronous geometry checks via `getBoundingClientRect()` against window dimensions.\n\n| Parameter              | Type      | Default | Description                                                                           |\n| ---------------------- | --------- | ------- | ------------------------------------------------------------------------------------- |\n| `el`                   | `Element` | -       | The DOM element to check                                                              |\n| `options`              | `Object`  | `null`  | Optional configuration object                                                         |\n| `options.fullyVisible` | `boolean` | `false` | If true, requires the element to be fully contained within the viewport (no clipping) |\n| `options.threshold`    | `number`  | `0`     | Minimum intersection ratio (0-1) required to count as in viewport                     |\n\n**Returns**: `boolean` - `true` if the element intersects the viewport.\n\n```javascript\n// Check if element is in viewport (partial overlap OK)\nconst isInViewport = ElementFinder.inViewport(element)\n\n// Check if element is fully visible (no clipping)\nconst isFullyVisible = ElementFinder.inViewport(element, { fullyVisible: true })\n\n// Check if at least 50% of element is visible\nconst isHalfVisible = ElementFinder.inViewport(element, { threshold: 0.5 })\n```\n\n### `parseXPath(expr, el, depth)`\n\nParses XPath-like expressions for element type matching. The `depth` parameter is used internally for recursion tracking and has a maximum limit of 100 to prevent stack overflow from deeply nested expressions.\n\n### `splitByOperator(expr, op)`\n\nSplits XPath expressions by operator (and/or).\n\n---\n\n## Working with Iframes\n\nThe library traverses **all same-origin frames**. Elements inside iframes **are** returned, but their `element` reference is `undefined` because a DOM node cannot be serialized across the frame boundary. To get interactable `element` references for iframe contents, switch into the iframe context first, then run the finder inside that frame.\n\n### Iframe Element Results\n\n```javascript\nconst results = ElementFinder.findElements({ type: 'button' })\n\n// results.elements contains main-frame AND iframe elements.\n// iframe elements have frameIndex >= 0 and no element reference.\nresults.elements.forEach((item) => {\n  if (item.frameIndex === -1 && item.element) {\n    // Main frame element - can interact directly\n    console.log('Main frame element:', item.element)\n    item.element.click() // Works\n  } else {\n    // Iframe element - switch context to interact\n    console.log('Iframe element at frameIndex:', item.frameIndex)\n  }\n})\n```\n\n### Interacting with Iframe Elements\n\nTo interact with elements inside an iframe, you must switch the Selenium driver context:\n\n```javascript\n// Find elements across all frames (main + iframes)\nconst results = await driver.executeScript(`\n  return ElementFinder.findElements({ type: 'button' });\n`)\n\n// Switch to the iframe, then run the finder again inside that frame\nawait driver.switchTo().frame(0) // first iframe\n\nconst iframeResults = await driver.executeScript(`\n  return ElementFinder.findElements({ type: 'button' });\n`)\n// These elements will have the element property since we're in the iframe context\n```\n\n---\n\n## Supported Element Types\n\n| Type          | Description                                                                                          |\n| ------------- | ---------------------------------------------------------------------------------------------------- |\n| `button`      | `<button>`, `[role=\"button\"]`, `[type=\"button\"]`, `[type=\"submit\"]`                                  |\n| `checkbox`    | `<input type=\"checkbox\">`, `[role=\"checkbox\"]`                                                       |\n| `switch`      | Toggle switches, checkboxes with switch role, buttons with `class=\"switch\"` or `data-state`          |\n| `slider`      | `<input type=\"range\">`, `[role=\"slider\"]`                                                            |\n| `datepicker`  | `<input type=\"date\">`, `[role=\"date\"]`                                                               |\n| `colorpicker` | `<input type=\"color\">`, `[role=\"color\"]`                                                             |\n| `radio`       | `<input type=\"radio\">`, `[role=\"radio\"]`                                                             |\n| `dropdown`    | `<select>`, `[role=\"combobox\"]`, `[role=\"listbox\"]`, class-based dropdown/trigger, ancestor matching |\n| `textbox`     | `<textarea>`, `<input>` (text/password/search/email/number/tel/url), `[role=\"textbox\"]`              |\n| `link`        | `<a>`, `[role=\"link\"]`, `[href]`                                                                     |\n| `heading`     | `<h1>-<h6>`, `[role=\"heading\"]`                                                                      |\n| `navigation`  | `<nav>`, `[role=\"navigation\"]`                                                                       |\n| `list`        | `<ul>`, `<ol>`, `[role=\"list\"]`                                                                      |\n| `listitem`    | `<li>`, `[role=\"listitem\"]`                                                                          |\n| `menu`        | `<menu>`, `[role=\"menu\"]`                                                                            |\n| `menuitem`    | `[role=\"menuitem\"]`                                                                                  |\n| `toolbar`     | `[role=\"toolbar\"]`                                                                                   |\n| `dialog`      | `[role=\"dialog\"]`, `[role=\"alertdialog\"]`                                                            |\n| `table`       | `<table>`, `[role=\"table\"]`                                                                          |\n| `row`         | `<tr>`, `[role=\"row\"]`                                                                               |\n| `column`      | `<td>`, `<th>`, `[role=\"cell\"]`, `[role=\"gridcell\"]`, `[role=\"columnheader\"]`                        |\n| `cell`        | `<td>`, `[role=\"cell\"]`, `[role=\"gridcell\"]` (data cells only, no expansion)                         |\n| `image`       | `<img>`, `[role=\"img\"]`, `[alt]`                                                                     |\n| `file`        | `<input type=\"file\">`                                                                                |\n| `iframe`      | `<iframe>`                                                                                           |\n| `element`     | Matches all elements                                                                                 |\n\n---\n\n## Table Element Types: `column` vs `cell`\n\nBoth `column` and `cell` types find table cells, but they behave differently:\n\n| Type     | Matches                 | With Text Search                                          |\n| -------- | ----------------------- | --------------------------------------------------------- |\n| `column` | `<td>`, `<th>` elements | Returns **all cells** in the column (header + data cells) |\n| `cell`   | `<td>` elements only    | Returns **only the specific cell** (no expansion)         |\n\n**Example**:\n\n```javascript\n// Find all cells in the \"City\" column (header + 3 data cells = 4 total)\nconst columnResult = ElementFinder.findElements({\n  type: 'column',\n  text: 'City',\n})\n// Returns: [th:City, td:New York, td:London, td:Paris]\n\n// Find all cells when searching for a data cell value\nconst columnResult2 = ElementFinder.findElements({\n  type: 'column',\n  text: 'Paris',\n})\n// Returns: [th:City, td:New York, td:London, td:Paris]\n\n// Find only the specific cell containing \"Paris\"\nconst cellResult = ElementFinder.findElements({ type: 'cell', text: 'Paris' })\n// Returns: [td:Paris]\n\n// Find by header text with cell type - returns only the header cell\nconst headerCell = ElementFinder.findElements('cell', 'City')\n// Returns: [] (no td elements match \"City\" header text)\n```\n\n---\n\n## Searchable Attributes\n\nBy default, the library searches these attributes **in strict priority order** (first match wins). The order determines which attribute value is used when multiple attributes on the same element contain the search text:\n\n1. `name`\n2. `aria-label`\n3. `aria-labelledby`\n4. `aria-placeholder`\n5. `aria-valuetext`\n6. `aria-description`\n7. `placeholder`\n8. `hint`\n9. `title`\n10. `tooltip`\n11. `alt`\n12. `data-value`\n13. `data-test-id`\n14. `data-testid`\n15. `id`\n16. `resource-id`\n17. `src`\n18. `value`\n\nIf no attribute matches, the library falls back to direct text nodes, then full `textContent`.\n\n---\n\n## Performance\n\nThe library is optimized for large DOM trees with efficient algorithms:\n\n- **Pre-compiled type matchers**: Type definitions are compiled into cached matcher functions at module load time\n- **O(n) innermost element filtering**: Set-based lookups instead of O(n²) nested loops\n- **Map-based column expansion**: O(1) element-to-column-position lookups for table cells\n- **Optimized text matching**: Direct text node iteration avoids expensive textContent calls\n- **Loop optimizations**: Traditional for-loops with cached lengths for hot paths\n\n---\n\n## Development\n\n### Running Tests\n\n```bash\n# Run all tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n\n# Run tests with coverage\nnpm run test:coverage\n```\n\n**Note**: The `tests/integration/helpers/` folder is excluded from vitest runs as it contains helper utilities.\n\n### Linting\n\n```bash\nnpm run lint\n```\n\n### Code Coverage\n\nThe library includes a Node.js-compatible module (`src/element-finder.js`) that provides the same functionality as the browser-injected `index.js` for coverage testing. This module is fully covered by unit tests.\n\nThe original `index.js` is browser-injected code executed via Selenium's `executeScript`. Coverage for browser-injected code requires browser-based tools like Istanbul or running tests in a browser environment.\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}