diff --git a/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs b/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs index 012a5c33994..dac2c59112a 100644 --- a/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs +++ b/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs @@ -91,5 +91,18 @@ public void GetsActiveElement() Assert.AreEqual("fname", attr); } + + [TestMethod] + public void FindsElementInShadowDom() + { + StartDriver(); + driver.Url = "https://www.selenium.dev/selenium/web/shadowRootPage.html"; + + IWebElement shadowHost = driver.FindElement(By.CssSelector("custom-checkbox-element")); + ISearchContext shadowRoot = shadowHost.GetShadowRoot(); + IWebElement shadowContent = shadowRoot.FindElement(By.CssSelector("input[type=checkbox]")); + + Assert.IsTrue(shadowContent.Displayed); + } } } diff --git a/examples/java/src/test/java/dev/selenium/elements/FindersTest.java b/examples/java/src/test/java/dev/selenium/elements/FindersTest.java index 0cfe3e22524..cadcac6a5c4 100644 --- a/examples/java/src/test/java/dev/selenium/elements/FindersTest.java +++ b/examples/java/src/test/java/dev/selenium/elements/FindersTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import org.openqa.selenium.By; +import org.openqa.selenium.SearchContext; import org.openqa.selenium.WebElement; import java.util.List; @@ -90,4 +91,16 @@ public void getsActiveElement() { assertEquals("fname", attr); } + + @Test + public void findsElementInShadowDom() { + startChromeDriver(); + driver.get("https://www.selenium.dev/selenium/web/shadowRootPage.html"); + + WebElement shadowHost = driver.findElement(By.cssSelector("custom-checkbox-element")); + SearchContext shadowRoot = shadowHost.getShadowRoot(); + WebElement shadowContent = shadowRoot.findElement(By.cssSelector("input[type=checkbox]")); + + assertTrue(shadowContent.isDisplayed()); + } } diff --git a/examples/javascript/test/elements/finders.spec.js b/examples/javascript/test/elements/finders.spec.js index ad9b391606b..648e71d386e 100644 --- a/examples/javascript/test/elements/finders.spec.js +++ b/examples/javascript/test/elements/finders.spec.js @@ -75,4 +75,16 @@ describe('Finders', function () { assert.equal(attr, 'fname'); await driver.quit(); }); + + it('finds an element in the shadow DOM', async function () { + let driver = await new Builder().forBrowser('chrome').build(); + await driver.get('https://www.selenium.dev/selenium/web/shadowRootPage.html'); + + const shadowHost = await driver.findElement(By.css('custom-checkbox-element')); + const shadowRoot = await shadowHost.getShadowRoot(); + const shadowContent = await shadowRoot.findElement(By.css('input[type=checkbox]')); + + assert.ok(await shadowContent.isDisplayed()); + await driver.quit(); + }); }); diff --git a/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt b/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt index 230c951cd1d..19919137833 100644 --- a/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt +++ b/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt @@ -79,6 +79,17 @@ class FindersTest : BaseTest() { assertEquals("fname", attr) } + @Test + fun findsElementInShadowDom() { + driver.get("https://www.selenium.dev/selenium/web/shadowRootPage.html") + + val shadowHost = driver.findElement(By.cssSelector("custom-checkbox-element")) + val shadowRoot = shadowHost.shadowRoot + val shadowContent = shadowRoot.findElement(By.cssSelector("input[type=checkbox]")) + + assertTrue(shadowContent.isDisplayed) + } + @BeforeEach fun configureImplicitWait() { driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500)) diff --git a/examples/ruby/spec/elements/finders_spec.rb b/examples/ruby/spec/elements/finders_spec.rb index ca10461e326..4b8e2bcfd7c 100644 --- a/examples/ruby/spec/elements/finders_spec.rb +++ b/examples/ruby/spec/elements/finders_spec.rb @@ -61,4 +61,14 @@ expect(attr).to eq('fname') end + + it 'finds an element in the shadow dom' do + driver.navigate.to 'https://www.selenium.dev/selenium/web/shadowRootPage.html' + + shadow_host = driver.find_element(css: 'custom-checkbox-element') + shadow_root = shadow_host.shadow_root + shadow_content = shadow_root.find_element(css: 'input[type=checkbox]') + + expect(shadow_content).to be_displayed + end end diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.en.md b/website_and_docs/content/documentation/webdriver/elements/finders.en.md index fcc5e0a0d02..b1394898dcd 100644 --- a/website_and_docs/content/documentation/webdriver/elements/finders.en.md +++ b/website_and_docs/content/documentation/webdriver/elements/finders.en.md @@ -38,22 +38,22 @@ two elements with the class name `information`, so this method returns the first {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} - {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L22-L23">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L23-L24">}} {{< /tab >}} {{< tab header="Python" >}} - {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}} {{< /tab >}} {{< tab header="CSharp" >}} - {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L15-L16">}} +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L15-L16">}} {{< /tab >}} {{< tab header="Ruby" >}} {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L10-L11" >}} {{< /tab >}} {{< tab header="JavaScript" >}} - {{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L9-L10">}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L9-L10">}} {{< /tab >}} {{< tab header="Kotlin" >}} - {{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L19-L20">}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L19-L20">}} {{< /tab >}} {{< /tabpane >}} @@ -67,22 +67,22 @@ One solution is to locate an ancestor of the desired element, then call find ele {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} - {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L31-L33">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L32-L34">}} {{< /tab >}} {{< tab header="Python" >}} - {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}} {{< /tab >}} {{< tab header="CSharp" >}} - {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L25-L27">}} +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L25-L27">}} {{< /tab >}} {{< tab header="Ruby" >}} {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L17-L19" >}} {{< /tab >}} {{< tab header="JavaScript" >}} - {{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L18-L20">}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L18-L20">}} {{< /tab >}} {{< tab header="Kotlin" >}} - {{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L27-L29">}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L27-L29">}} {{< /tab >}} {{< /tabpane >}} @@ -100,31 +100,24 @@ The Shadow DOM is an encapsulated DOM tree hidden inside an element. With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree with easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater. -{{< tabpane langEqualsHeader=true >}} -{{< badge-examples >}} +{{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host")); -SearchContext shadowRoot = shadowHost.getShadowRoot(); -WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L100-L102" >}} {{< /tab >}} -{{< tab header="Python" text=true >}} -{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}} +{{< tab header="Python" >}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42" >}} {{< /tab >}} {{< tab header="CSharp" >}} -var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host")); -var shadowRoot = shadowHost.GetShadowRoot(); -var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L101-L103" >}} {{< /tab >}} {{< tab header="Ruby" >}} -shadow_host = @driver.find_element(css: '#shadow_host') -shadow_root = shadow_host.shadow_root -shadow_content = shadow_root.find_element(css: '#shadow_content') +{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L68-L70" >}} {{< /tab >}} -{{< tab header="JavaScript" text=true >}} -{{< badge-code >}} +{{< tab header="JavaScript" >}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L83-L85" >}} {{< /tab >}} -{{< tab header="Kotlin" text=true >}} -{{< badge-code >}} +{{< tab header="Kotlin" >}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L86-L88" >}} {{< /tab >}} {{< /tabpane >}} @@ -141,22 +134,22 @@ For this example, we'll use a CSS selector: {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} - {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L41-L42">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L42-L43">}} {{< /tab >}} {{< tab header="Python" >}} - {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}} {{< /tab >}} {{< tab header="CSharp" >}} - {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L36-L37">}} +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L36-L37">}} {{< /tab >}} {{< tab header="Ruby" >}} {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L25-L26" >}} {{< /tab >}} {{< tab header="JavaScript" >}} - {{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L28-L29">}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L28-L29">}} {{< /tab >}} {{< tab header="Kotlin" >}} - {{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L36-L37">}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L36-L37">}} {{< /tab >}} {{< /tabpane >}} @@ -170,22 +163,22 @@ references to all input elements will be returned in a collection. {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} - {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L50-L51">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L51-L52">}} {{< /tab >}} {{< tab header="Python" >}} - {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}} {{< /tab >}} {{< tab header="CSharp" >}} - {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L46-L47">}} +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L46-L47">}} {{< /tab >}} {{< tab header="Ruby" >}} {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L32-L33" >}} {{< /tab >}} {{< tab header="JavaScript" >}} - {{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L37-L38">}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L37-L38">}} {{< /tab >}} {{< tab header="Kotlin" >}} - {{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L44-L45">}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L44-L45">}} {{< /tab >}} {{< /tabpane >}} @@ -196,22 +189,22 @@ need to iterate over the collection and identify the one you want. {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} - {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L61-L64">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L62-L65">}} {{< /tab >}} {{< tab header="Python" >}} - {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}} {{< /tab >}} {{< tab header="CSharp" >}} - {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L58-L62">}} +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L58-L62">}} {{< /tab >}} {{< tab header="Ruby" >}} - {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L42" >}} +{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L40-L42" >}} {{< /tab >}} {{< tab header="JavaScript" >}} - {{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L47-L50">}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L47-L50">}} {{< /tab >}} {{< tab header="Kotlin" >}} - {{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L53-L56">}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L53-L56">}} {{< /tab >}} {{< /tabpane >}} @@ -222,22 +215,22 @@ To achieve this, the parent WebElement is chained with 'findElements' to access {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} - {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L74-L78">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L75-L79">}} {{< /tab >}} {{< tab header="Python" >}} - {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}} {{< /tab >}} {{< tab header="CSharp" >}} - {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L73-L78">}} +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L73-L78">}} {{< /tab >}} {{< tab header="Ruby" >}} - {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L48-L51" >}} +{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L48-L51" >}} {{< /tab >}} {{< tab header="JavaScript" >}} - {{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L59-L63">}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L59-L63">}} {{< /tab >}} {{< tab header="Kotlin" >}} - {{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L64-L68">}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L64-L68">}} {{< /tab >}} {{< /tabpane >}} @@ -247,22 +240,22 @@ It is used to track (or) find DOM element which has the focus in the current bro {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} - {{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L88-L89">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L89-L90">}} {{< /tab >}} {{< tab header="Python" >}} - {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}} {{< /tab >}} {{< tab header="CSharp" >}} - {{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L89-L90">}} +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L89-L90">}} {{< /tab >}} {{< tab header="Ruby" >}} - {{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L58-L60" >}} +{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L58-L60" >}} {{< /tab >}} {{< tab header="JavaScript" >}} - {{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L72-L73">}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L72-L73">}} {{< /tab >}} {{< tab header="Kotlin" >}} - {{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L76-L77">}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L76-L77">}} {{< /tab >}} {{< /tabpane >}} diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.ja.md b/website_and_docs/content/documentation/webdriver/elements/finders.ja.md index f5d1742ecd1..06c8f80ed9f 100644 --- a/website_and_docs/content/documentation/webdriver/elements/finders.ja.md +++ b/website_and_docs/content/documentation/webdriver/elements/finders.ja.md @@ -27,7 +27,7 @@ Seleniumロケーターテストページには、クラス名が `information` {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L22-L23">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L23-L24">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}} @@ -55,7 +55,7 @@ DOM全体で一意のロケーターを見つけるのではなく、検索を {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L31-L33">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L32-L34">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}} @@ -87,31 +87,24 @@ The Shadow DOM is an encapsulated DOM tree hidden inside an element. With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree with easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater. -{{< tabpane langEqualsHeader=true >}} -{{< badge-examples >}} +{{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host")); -SearchContext shadowRoot = shadowHost.getShadowRoot(); -WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L100-L102" >}} {{< /tab >}} -{{< tab header="Python" text=true >}} -{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}} +{{< tab header="Python" >}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42" >}} {{< /tab >}} {{< tab header="CSharp" >}} -var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host")); -var shadowRoot = shadowHost.GetShadowRoot(); -var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L101-L103" >}} {{< /tab >}} {{< tab header="Ruby" >}} -shadow_host = @driver.find_element(css: '#shadow_host') -shadow_root = shadow_host.shadow_root -shadow_content = shadow_root.find_element(css: '#shadow_content') +{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L68-L70" >}} {{< /tab >}} -{{< tab header="JavaScript" text=true >}} -{{< badge-code >}} +{{< tab header="JavaScript" >}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L83-L85" >}} {{< /tab >}} -{{< tab header="Kotlin" text=true >}} -{{< badge-code >}} +{{< tab header="Kotlin" >}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L86-L88" >}} {{< /tab >}} {{< /tabpane >}} @@ -126,7 +119,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L41-L42">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L42-L43">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}} @@ -155,7 +148,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L50-L51">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L51-L52">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}} @@ -180,7 +173,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L61-L64">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L62-L65">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}} @@ -206,7 +199,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L74-L78">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L75-L79">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}} @@ -231,7 +224,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L88-L89">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L89-L90">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}} diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md b/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md index a1f02e266e9..99a327f51df 100644 --- a/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md +++ b/website_and_docs/content/documentation/webdriver/elements/finders.pt-br.md @@ -27,7 +27,7 @@ dois elementos com o nome de classe `information`, então este método retorna o {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L22-L23">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L23-L24">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}} @@ -55,7 +55,7 @@ Uma possível solução seria localizar um ancestral do elemento desejado, entã {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L31-L33">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L32-L34">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}} @@ -88,31 +88,24 @@ The Shadow DOM is an encapsulated DOM tree hidden inside an element. With the release of v96 in Chromium Browsers, Selenium can now allow you to access this tree with easy-to-use shadow root methods. NOTE: These methods require Selenium 4.0 or greater. -{{< tabpane langEqualsHeader=true >}} -{{< badge-examples >}} +{{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host")); -SearchContext shadowRoot = shadowHost.getShadowRoot(); -WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L100-L102" >}} {{< /tab >}} -{{< tab header="Python" text=true >}} -{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}} +{{< tab header="Python" >}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42" >}} {{< /tab >}} {{< tab header="CSharp" >}} -var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host")); -var shadowRoot = shadowHost.GetShadowRoot(); -var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L101-L103" >}} {{< /tab >}} {{< tab header="Ruby" >}} -shadow_host = @driver.find_element(css: '#shadow_host') -shadow_root = shadow_host.shadow_root -shadow_content = shadow_root.find_element(css: '#shadow_content') +{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L68-L70" >}} {{< /tab >}} -{{< tab header="JavaScript" text=true >}} -{{< badge-code >}} +{{< tab header="JavaScript" >}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L83-L85" >}} {{< /tab >}} -{{< tab header="Kotlin" text=true >}} -{{< badge-code >}} +{{< tab header="Kotlin" >}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L86-L88" >}} {{< /tab >}} {{< /tabpane >}} @@ -128,7 +121,7 @@ Para esse exemplo, utilizaremos um seletor CSS: {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L41-L42">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L42-L43">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}} @@ -156,7 +149,7 @@ referências a todos os elementos input serão devolvidas em uma coleção. {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L50-L51">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L51-L52">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}} @@ -182,7 +175,7 @@ precisa iterar sobre a coleção e identificar o que você deseja. {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L61-L64">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L62-L65">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}} @@ -208,7 +201,7 @@ Para realizar isso, o WebElement pai é encadeado com o 'findElements' para aces {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L74-L78">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L75-L79">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}} @@ -233,7 +226,7 @@ Ele é usado para rastrear (ou) encontrar um elemento DOM que tem o foco no cont {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L88-L89">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L89-L90">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}} diff --git a/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md b/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md index ee79f3706b1..baf83c0137f 100644 --- a/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md +++ b/website_and_docs/content/documentation/webdriver/elements/finders.zh-cn.md @@ -30,7 +30,7 @@ Selenium 提供了许多内置的 [定位策略]({{< ref "locators.md" >}}), {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L22-L23">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L23-L24">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L7-L8">}} @@ -61,7 +61,7 @@ Selenium 提供了许多内置的 [定位策略]({{< ref "locators.md" >}}), {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L31-L33">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L32-L34">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L14-L16">}} @@ -92,31 +92,24 @@ Selenium 提供了许多内置的 [定位策略]({{< ref "locators.md" >}}), Shadow DOM 是隐藏在元素内部的封装 DOM 树。 自 Chromium 浏览器在 v96 发布后,Selenium 已支持通过易用的 shadow root 方法访问该树。注意:这些方法需要 Selenium 4.0 或更高版本。 -{{< tabpane langEqualsHeader=true >}} -{{< badge-examples >}} +{{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -WebElement shadowHost = driver.findElement(By.cssSelector("#shadow_host")); -SearchContext shadowRoot = shadowHost.getShadowRoot(); -WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L100-L102" >}} {{< /tab >}} -{{< tab header="Python" text=true >}} -{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42">}} +{{< tab header="Python" >}} +{{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L39-L42" >}} {{< /tab >}} {{< tab header="CSharp" >}} -var shadowHost = _driver.FindElement(By.CssSelector("#shadow_host")); -var shadowRoot = shadowHost.GetShadowRoot(); -var shadowContent = shadowRoot.FindElement(By.CssSelector("#shadow_content")); +{{< gh-codeblock path="/examples/dotnet/SeleniumDocs/Elements/FindersTest.cs#L101-L103" >}} {{< /tab >}} {{< tab header="Ruby" >}} -shadow_host = @driver.find_element(css: '#shadow_host') -shadow_root = shadow_host.shadow_root -shadow_content = shadow_root.find_element(css: '#shadow_content') +{{< gh-codeblock path="/examples/ruby/spec/elements/finders_spec.rb#L68-L70" >}} {{< /tab >}} -{{< tab header="JavaScript" text=true >}} -{{< badge-code >}} +{{< tab header="JavaScript" >}} +{{< gh-codeblock path="/examples/javascript/test/elements/finders.spec.js#L83-L85" >}} {{< /tab >}} -{{< tab header="Kotlin" text=true >}} -{{< badge-code >}} +{{< tab header="Kotlin" >}} +{{< gh-codeblock path="/examples/kotlin/src/test/kotlin/dev/selenium/elements/FindersTest.kt#L86-L88" >}} {{< /tab >}} {{< /tabpane >}} @@ -133,7 +126,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L41-L42">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L42-L43">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L22-L23">}} @@ -162,7 +155,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L50-L51">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L51-L52">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L29-L30">}} @@ -188,7 +181,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L61-L64">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L62-L65">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L51-L53">}} @@ -214,7 +207,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L74-L78">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L75-L79">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L61-L64">}} @@ -239,7 +232,7 @@ shadow_content = shadow_root.find_element(css: '#shadow_content') {{< tabpane langEqualsHeader=true text=true >}} {{< tab header="Java" >}} -{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L88-L89">}} +{{< gh-codeblock path="/examples/java/src/test/java/dev/selenium/elements/FindersTest.java#L89-L90">}} {{< /tab >}} {{< tab header="Python" >}} {{< gh-codeblock path="/examples/python/tests/elements/test_finders.py#L72-L73">}}