Support & help
Quick answers, troubleshooting, and how to get in touch.
Quick start
If you just installed the extension and want to verify it works, here's the fastest path:
- Open any regular website (anything starting with
http://orhttps://). - Click the XPath Locator Generator icon in your Chrome toolbar. The side panel opens.
- Click Single Locator in the panel.
- Click any element on the page — a button, an input, a link, a heading. The xpath appears in the panel.
- Click copy next to the xpath to copy it to your clipboard.
If that doesn't work, jump to Troubleshooting.
The three modes
Single Locator
One click gives you the best xpath for that one element, plus alternative locator strategies (id, className, css, name). Use the chevron next to Other Locator Strategies to expand and see all options with their match counts.
List of Locators
One click gives you xpaths for every element that matches the same pattern. Useful for capturing "all rows in this table" or "every Add-to-Cart button on the page" in a single action. Click COPY ALL to grab them all at once.
Dynamic Locator
Parameterized xpath templates with ready-to-paste code snippets for Selenium (Java, Python) and Playwright (JavaScript). Three sub-modes under the Dynamic Locator card:
- Normal — single-click parameterization. Click one element; the extension extracts variable parts (its own text) and produces a template.
- 1 Condition — two-click flow. Click the target first (e.g. an unlabeled checkbox), then click a static text anchor near it (e.g. the word "Sony"). The anchor text becomes a variable in the generated code, so you can swap "Sony" for "JBL", "Bose", etc.
- 2 Condition — three-click flow for table cells. Click the target cell, then the column header, then the row header. The generated xpath is parameterized by both column and row, so you can pick any cell with just two string substitutions.
Frequently asked questions
How do I open the side panel again after I close it?
Click the XPath Locator Generator icon in your Chrome toolbar (top-right area). If you don't see the icon, click Chrome's puzzle-piece icon and pin the extension. The side panel will reopen on whichever tab you're currently looking at.
How do I capture a tooltip, dropdown, or other element that disappears?
Use freeze mode. Click the snowflake icon in the side panel header before activating a capture mode. While frozen, the page's setTimeout, setInterval, and DOM-removal calls are paused, which prevents auto-dismiss UI from disappearing while you reach over to click it.
Toggle the snowflake icon again (or stop selection) to unfreeze the page.
The xpath I copied doesn't find the element in my test. Why?
The three most common causes:
- Iframe context. If you clicked an element inside an iframe, you need to switch to that frame first in your test framework:
driver.switchTo().frame(...)in Selenium orpage.frameLocator(...)in Playwright. The extension shows the frame URL in the result eyebrow when this applies. - Dynamic class names. If the page uses CSS Modules, emotion, or styled-components, class names like
btn_primary_a3f2bchange on every build. Check the alternatives block for a more stable strategy (id, name, role, or text-based). - Wait conditions. Your test may run the xpath before the element has rendered. Wrap your query in an explicit wait (
WebDriverWaitorpage.waitFor).
Why does Chrome say "Read and change all your data on websites" when I install this?
Required to inspect webpage elements and generate locators. No personal data or browsing activity is collected or shared.
That warning is Chrome's standard wording for any extension that needs to read the DOM of a page. It's the same text Chrome shows for SelectorsHub, ChroPath, and every other QA inspector tool. Chrome owns that dialog text — extension developers can't customize it.
What the extension actually does: the manifest declares no content_scripts, so it does NOT attach to pages automatically. It only reads the DOM when you explicitly click a mode button to capture an xpath, and even then nothing is sent anywhere — all computation happens locally in your browser.
Does it work in Edge, Brave, Arc, or other Chromium browsers?
Yes — any Chromium-based browser at version 114 or newer that supports Manifest V3 and the Side Panel API. Confirmed working on Chrome, Edge, Brave, Arc, and Opera. Firefox is not supported (different extension API).
Can I use this on internal company applications or restricted Chrome installs?
Yes. The extension makes zero network calls and ships with no third-party dependencies, so it's compatible with strict corporate Chrome policies. IT admins can also restrict it to specific hosts via the runtime_blocked_hosts and runtime_allowed_hosts policies. See the enterprise section below.
Does it work with Shadow DOM? Cross-origin iframes?
Yes to both. The extension pierces open Shadow DOM and emits xpath that targets elements through the shadow boundary. For cross-origin iframes, content.js is injected into every frame of the tab when you activate a mode, so capture works regardless of the iframe's origin. The result includes the iframe URL so your test can switch into it.
Closed Shadow DOM is not accessible to any extension (Chrome blocks it for security).
How do I clear my saved state / preferences?
The extension stores only three small values locally: your last captured xpath, the active mode, and whether the "Other Locator Strategies" block is expanded. To clear them:
- Visit
chrome://extensions, find XPath Locator Generator, click Details, then Site settings → Clear data. - Or just uninstall the extension — Chrome removes all extension data automatically.
Is there an offline / air-gapped version?
The extension is already fully offline. It makes zero network calls and contains no remote code. Once installed, it works on any disconnected machine. Chrome's auto-update mechanism is the only network activity related to the extension, and admins can disable that via the ExtensionSettings.update_url policy if needed.
How do I report a bug or request a feature?
See the Contact section below. Please include your Chrome version, the extension version (visible in the side panel header), the URL where the issue happened (if it's a public site), and the exact error message if one was shown.
Error message lookup
If the side panel showed you a specific error message, find it here:
| What you saw | What it means & what to do |
|---|---|
| cannot run on this page · open a regular http/https site | You're on a chrome://, chrome-extension://, edge://, about:, or Chrome Web Store URL. Chrome blocks all extensions on these for security reasons. Open a regular http/https website and try again. |
| cannot run on this page · Chrome blocks extensions on this URL | Same as above — the URL is one Chrome itself forbids. Examples: chrome://settings, view-source:, the New Tab page. |
| couldn't find the active tab · try clicking the extension icon again | The side panel lost track of which tab you intend to capture on. Click the toolbar icon to reopen the panel on the desired tab, then try the mode button again. |
| couldn't connect to the page · refresh the tab | The content script injected but couldn't initialize, usually because the page is mid-navigation, suspended, or running in a strict CSP context that blocked the injection. Refresh the tab and try again. If it persists on a specific site, it may use a CSP that blocks all extension scripts. |
Troubleshooting
Nothing happens when I click a mode button
Check the status text at the top of the side panel — there's almost always a specific error message there. Common causes:
- You're on a
chrome://page. Open a regular website instead. - The page hasn't finished loading. Wait a second and try again.
- The side panel was opened on a different tab than the one you're trying to capture. Click the toolbar icon to reopen on the current tab.
The crosshair / highlight overlay doesn't appear when I hover
If you activated a mode but no green overlay appears around elements as you hover:
- Refresh the tab and try again. The content script may have failed to inject due to a page-load race.
- Some sites use strict CSP that blocks injected styles — try a different site to confirm the extension works at all, then report the specific site if you need it to work there.
- Make sure no other QA / DOM-inspection extension is conflicting (SelectorsHub, ChroPath, etc.). Disable others temporarily to isolate.
Freeze mode doesn't pause the page as expected
Freeze mode overrides setTimeout, setInterval, requestAnimationFrame, and DOM-removal methods. It works for most pages but has limits:
- Animations driven purely by CSS (without timers) won't pause. You can still click the element while it's animating.
- Tooltips that close on focus-out or pointer-out may close before you click them — try clicking immediately after toggling freeze.
- WebSocket-driven UI updates (live dashboards) may continue to refresh, since freeze doesn't intercept network events.
Toggle freeze off after capture to restore normal page behavior. Reload the tab if anything seems stuck.
1-Condition or 2-Condition flow keeps asking me to "click a different element"
This happens when two consecutive clicks resolve to the same DOM element. The most common cause: the page uses a "button containing nested spans" pattern, and clicking different parts of the visible widget all map to the same clickable ancestor.
Tips:
- For 1-Condition: click the target element first (the checkbox or input), then click the visible text of the label — not the area around it.
- For 2-Condition: click the target cell first, then the column header text, then the row header text. Each click should land on a distinct cell.
- Press Esc to cancel and start over if you get stuck.
Copy button doesn't copy anything
The extension uses the standard navigator.clipboard.writeText API, which Chrome restricts to user-initiated actions. If clicking copy seems to do nothing:
- Make sure you actually clicked the copy button (not nearby empty area).
- Try opening DevTools (F12) and checking the Console for any clipboard-related error.
- Some corporate DLP solutions block clipboard writes — check with your IT team if you're on a managed device.
Enterprise & security
For IT admins evaluating this extension for managed deployment:
- Manifest V3, minimum Chrome 114. Compatible with Chrome Enterprise policies.
- Force-install via
ExtensionInstallForcelist; restrict to specific hosts viaruntime_blocked_hosts/runtime_allowed_hosts. - No network calls, no telemetry, no third-party SDKs — verifiable by inspecting the source bundle.
- No collection of cookies, history, form data, or browsing activity.
- Three small UI-state values stored locally via
chrome.storage.local(never synced). - Full documentation suite included in the source:
SECURITY.md,PRIVACY.md,PERMISSIONS.md,ENTERPRISE.md,THREAT_MODEL.md.
Contact & bug reports
If the FAQ and troubleshooting above didn't resolve your issue:
Email: sajb8722@gmail.com
Issue tracker: Please mail a bug or feature request
- Your Chrome version (
chrome://version) - The extension version (visible at the top of the side panel)
- Your operating system
- The exact error message if one was shown
- The URL where the issue happened (if it's a public site)
- Steps to reproduce, or a screenshot/screen recording
Version history
The full changelog ships with the extension. Recent highlights:
- v2.17 — Reverted to
<all_urls>host_permissions for SelectorsHub-style UX. No runtime permission prompt; works on every tab from install. - v2.16 — (superseded) tried
optional_host_permissionswith a one-time runtime prompt. - v2.15 — Switched to
<all_urls>host permission for friction-free multi-tab use. Still no static content scripts. - v2.14 — Enterprise readiness pass: strict CSP, full documentation suite, in-extension help page.
- v2.13 — "Other Locator Strategies" block is now collapsible with keyboard support.
- v2.12 — Bug fixes for the 1-Condition / 2-Condition dynamic flows.
- v2.11 — Added Dynamic Locator sub-modes: Normal, 1 Condition, 2 Condition.