The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →XPath locators select elements by their place in a document tree, attributes, text, or relationships to other elements. Use the examples below as a quick reference for Selenium and other XPath-capable tools; a locator only matches if the target page’s DOM contains the structure and values it describes.
XPath locator syntax at a glance
A location step has an axis, a node test, and optionally one or more predicates. A path combines steps separated by /. The examples here illustrate common XPath patterns; they have not been tested against a live page, so actual matches depend on the target DOM and XPath engine.
| Syntax | Meaning | Example |
|---|---|---|
/ |
Separates path steps; at the start, selects from the document root. | /html/body |
// |
Abbreviates a search through descendants at any depth. | //button |
child:: |
Selects child nodes. This is the default axis when omitted. | child::button or button |
@ |
Abbreviates the attribute axis. | @name |
[...] |
Filters a set of matches with a predicate. | //input[@name='email'] |
. |
Refers to the context node. | . |
.. |
Abbreviates the parent axis. | .. |
For example, //input[@name='email'] searches for input elements anywhere in the document and keeps those whose name attribute is email.
Common XPath locator examples
| What you need | XPath | How it reads |
|---|---|---|
| Find elements by tag | //button |
Find button descendants through the document tree. |
| Match an exact attribute value | //input[@name='email'] |
Find inputs whose name attribute is email. |
| Match an attribute substring | //button[contains(@class, 'primary')] |
Find buttons whose class attribute contains primary. This is a substring check, not a class-token check, so it can match unintended values. |
| Match normalized text exactly | //button[normalize-space()='Save'] |
Compare the element’s normalized string value with Save. |
| Match a text fragment | //a[contains(., 'Documentation')] |
Find links whose string value contains the fragment. |
| Require both conditions | //input[@type='text' and @name='email'] |
Both predicates must be true. |
| Require either condition | //button[@type='submit' or @aria-label='Save'] |
At least one predicate must be true. |
| Find an input next to a label | //label[normalize-space()='Email']/following-sibling::input |
Find an input following the matching label as a sibling. |
| Find a row through its contents | //span[normalize-space()='Total']/ancestor::tr[1] |
Find the nearest matching ancestor row in that axis context. |
| Select the first grouped match | (//button[@type='submit'])[1] |
Group the results, then select the first one. XPath positions are one-based. |
Predicates, positions, and context
A predicate in square brackets filters the nodes selected by its preceding step. Predicates can test attributes, text, position, or combinations of conditions. Numeric positions start at 1, not 0.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errors#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Position depends on the set and context to which the predicate applies. For example, preceding::foo[1] applies the position predicate in the axis context, while (preceding::foo)[1] applies it to the grouped result. Parentheses can therefore change which node an expression selects.
Use parentheses when you mean “the first result from this complete set,” as in (//button[@type='submit'])[1]. Without grouping, a position predicate may be evaluated for each step’s context rather than the overall result you had in mind.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
Useful XPath functions
| Function or expression | Use | Example |
|---|---|---|
contains(value, fragment) |
Match when a string contains a fragment. | //a[contains(., 'Docs')] |
starts-with(value, prefix) |
Match when a string begins with a prefix. | //input[starts-with(@name, 'user')] |
normalize-space(value) |
Trim and normalize whitespace before comparing. | //button[normalize-space()='Save'] |
text() |
Select text-node children in expressions that need to test text nodes. | //button[text()='Save'] |
position() |
Refer to a node’s position in the current context. | //li[position()=2] |
last() |
Refer to the final node in the current context. | //li[position()=last()] |
Text matching depends on the DOM and XPath implementation. text() tests text-node children, whereas . uses the context element’s string value, which can include descendant text. Choose the expression that reflects the actual markup and text structure.
Axes for navigating related elements
An axis describes the direction XPath takes from its current node. XPath defines 13 axes; these are the ones most useful in everyday locators.
Recommended Free Tools
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
| Axis | Direction | Example |
|---|---|---|
child:: |
Direct child nodes; the default axis. | //form/child::input |
parent:: |
The parent node. | //input[@name='email']/parent::div |
self:: |
The context node itself. | //button/self::button |
descendant:: |
Nodes below the context node at any depth. | //form/descendant::input |
ancestor:: |
Nodes above the context node toward the root. | //span[normalize-space()='Total']/ancestor::tr[1] |
following-sibling:: |
Siblings after the context node. | //label[normalize-space()='Email']/following-sibling::input |
preceding-sibling:: |
Siblings before the context node. | //input[@name='email']/preceding-sibling::label |
following:: |
Nodes later in document order, subject to XPath axis rules. | //h2[.='Details']/following::button |
preceding:: |
Nodes earlier in document order, subject to XPath axis rules. | //button[@id='save']/preceding::input |
attribute:: |
Attributes; commonly written with @. |
//input/attribute::name or //input/@name |
Axes are useful when an element is most reliably identified through a related label, row, or ancestor. Prefer a relationship that reflects the page’s meaning over a long chain of positional steps.
Using XPath with Selenium
XPath is one of Selenium WebDriver’s locator strategies, but XPath syntax belongs to the XPath language, not Selenium. Selenium’s official locator guidance says that unique, consistently predictable HTML IDs are generally preferred; when those are unavailable, it recommends a well-written CSS selector. Selenium also cautions that XPath can be harder to debug and may be slow, particularly for complicated DOM traversals. That is practical guidance, not a universal speed ranking.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Keep locators compact, readable, and scoped to a stable parent when possible. Before choosing XPath, consider:
- Stability: Does the locator use a predictable ID, test attribute, accessible name, or a fragile DOM position?
- Readability: Can another maintainer understand why it selects the intended element?
- Navigation: Do you need to move from a known child to an ancestor or use a sibling relationship?
- Text matching: Does the task require an XPath predicate or function for content?
- Scope: Can you narrow the search to a stable container?
- Debuggability: Will the expression be easy to inspect and update if the DOM changes?
Use a stable ID or concise CSS selector when it expresses the locator clearly. Choose XPath when its text matching or tree navigation makes the intent simpler than the alternatives.
Free tools Windows power users keep installed
One-click scans. No signup required.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Common problems and fixes
- The expression returns no match: Check that the element exists in the DOM at the time of lookup, and verify the tag, attribute, text, and relationship against the actual markup. A locator cannot match an element that has not loaded or is outside the searched document context.
- A text locator misses a visible label: The visible text may be split across descendant nodes or include whitespace. Inspect the DOM and consider comparing the element string value with
normalize-space(.)rather than relying on a directtext()match. - A class substring selects the wrong element:
contains(@class, 'primary')can match a larger class value unintentionally. Use a whitespace-aware class-token pattern or choose another locator strategy. - The first result is not the one intended: XPath positions are one-based and their meaning depends on predicate context. Group a complete result set with parentheses when selecting its first result.
- The expression is brittle after a layout change: Replace deep positional paths with a stable ID, a concise CSS selector, or a semantic relationship to a label or container.
- The locator is difficult to maintain: Split the problem conceptually: first identify a stable parent, then search within it using a short XPath. Avoid adding axes and predicates that do not improve accuracy.
Or skip the browser setup
If your goal is to capture a page rather than automate interaction with its elements, ScreenshotNeo provides a website screenshot API and MCP server. A single request returns an image or PDF. Its capture can accept cookie or consent banners and remove more than 60 known consent platforms, newsletter popups, and chat widgets; those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, with the result identified in response headers. Its MCP server offers take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients.
Example cURL request, using the API’s documented endpoint and parameters:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. The free plan includes 1,000 shots a month with no card; paid plans start at $5 for 3,000 shots. Sign up for ScreenshotNeo free.
Quick Recap
Further reference
- MDN: XPath explains XPath use with XML-like documents, including HTML and SVG DOMs.
- MDN: XPath guides links to axes, functions, and related material; the guides page was last modified February 5, 2025.
- W3C XPath 1.0 Recommendation describes the location-step and predicate behavior discussed here. It is an XPath 1.0 reference, not a claim about later versions.
- Selenium: Finders describes WebDriver locator strategies.
- Selenium: Tips on working with locators offers practical locator guidance and was last modified February 10, 2022.
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

