Comments (3)
@RenderMichael Take a look at alternative methods for locating elements. Pretty much any other method except for XPath already works across open shadow roots.
We strongly recommend avoiding XPath in favor of user-visible locators like GetByRole()
. Therefore, I don't think we'll be adding support for shadow dom in XPath locators.
If you really need XPath with manual shadow dom query, I'd recommend to register a custom selector engine that would query XPath in the shadow root. Something like this, but querying inside root.shadowRoot
.
In this case the API would be:
page.Locator("xpath=//path/to/shadow/host").Locator("shadow-xpath=./path/to/target/from/the/shadow/root")
from playwright.
For posterity, this is the engine I wrote, which works for my case:
playwright.Selectors.RegisterAsync("xpath-shadow", new()
{
ContentScript = true,
Script =
"""
{
queryAll(root, selector) {
if (selector.startsWith('/') && root.nodeType !== Node.DOCUMENT_NODE) {
selector = '.' + selector;
}
const result = [];
const document = root.ownerDocument || root;
if (!document)
return result;
if (!root.shadowRoot) {
return result; // if there's no shadow root, no error. just "not exists".
}
const firstElementInShadow = root.shadowRoot.querySelector("*");
const selectorFromParent = '../' + selector;
const it = document.evaluate(selectorFromParent, firstElementInShadow, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE);
for (let node = it.iterateNext(); node; node = it.iterateNext()) {
if (node.nodeType === Node.ELEMENT_NODE)
result.push(node);
}
return result;
}
}
""",
});
from playwright.
@dgozman Thanks for the swift response and the workaround tip!
from playwright.
Related Issues (20)
- [Bug]: .env file bypassed in debug mode 1.1.1 HOT 2
- [Feature]: Trace viewer: When using multiple browsers, I would like to see which browser is making which HTTP request HOT 1
- Video testing is not working on playwright HOT 4
- [Bug]: JUnit report contains invalid character in logs HOT 2
- [Bug]: Running issues in debug does not work and ends up in multiple different situations. HOT 4
- [Bug]: 1.44.0 automatically closes the browser on test end (even with reuseBrower:true) HOT 2
- Can't run tests in debug mode HOT 11
- [Bug]: Test info attached in html report in wrong format HOT 1
- [Feature]: receive parameters in `test.describe()` HOT 1
- Target page, context or browser has been closed HOT 1
- [Bug]: Unable to view the right context on Traces and Videos
- [Bug]: Playwright Extension Test Explorer cannot find setup.ts files HOT 2
- [Bug]: Updated to Playwright Test for VSCode v1.1.1 and all test except one dissappeared from Test Explorer view HOT 2
- [Bug]: Can't run tests with the extension (no Browser will be opend) HOT 3
- [Bug]: Setting a different locale does not work as expected HOT 4
- [Regression]: Playwright Test for VSCode can't find *.spec.ts files HOT 8
- [Bug]: "waitForResponse" always fails on firefox HOT 1
- [Bug]: Using force:true to click on an element overlapped by another element will not click or error out HOT 1
- [Bug]: Using test.fail() does not actually fail the test HOT 2
- [Bug]: Locators are in Playwright provided is not Detecting when we run same Scripts again HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from playwright.