Path: blob/trunk/java/test/org/openqa/selenium/ChildrenFindingTest.java
1865 views
// Licensed to the Software Freedom Conservancy (SFC) under one1// or more contributor license agreements. See the NOTICE file2// distributed with this work for additional information3// regarding copyright ownership. The SFC licenses this file4// to you under the Apache License, Version 2.0 (the5// "License"); you may not use this file except in compliance6// with the License. You may obtain a copy of the License at7//8// http://www.apache.org/licenses/LICENSE-2.09//10// Unless required by applicable law or agreed to in writing,11// software distributed under the License is distributed on an12// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13// KIND, either express or implied. See the License for the14// specific language governing permissions and limitations15// under the License.1617package org.openqa.selenium;1819import static org.assertj.core.api.Assertions.assertThat;20import static org.assertj.core.api.Assertions.assertThatExceptionOfType;21import static org.openqa.selenium.testing.drivers.Browser.SAFARI;2223import java.util.List;24import org.junit.jupiter.api.Test;25import org.openqa.selenium.testing.JupiterTestBase;26import org.openqa.selenium.testing.NotYetImplemented;2728class ChildrenFindingTest extends JupiterTestBase {2930@Test31void testFindElementByXPath() {32driver.get(pages.nestedPage);33WebElement element = driver.findElement(By.name("form2"));34WebElement child = element.findElement(By.xpath("select"));35assertThat(child.getAttribute("id")).isEqualTo("2");36}3738@Test39void testFindingElementsOnElementByXPathShouldFindTopLevelElements() {40driver.get(pages.simpleTestPage);41WebElement parent = driver.findElement(By.id("multiline"));42List<WebElement> allPs = driver.findElements(By.xpath("//p"));43List<WebElement> children = parent.findElements(By.xpath("//p"));44assertThat(allPs.size()).isEqualTo(children.size());45}4647@Test48void testFindingDotSlashElementsOnElementByXPathShouldFindNotTopLevelElements() {49driver.get(pages.simpleTestPage);50WebElement parent = driver.findElement(By.id("multiline"));51List<WebElement> children = parent.findElements(By.xpath("./p"));52assertThat(children).hasSize(1);53assertThat(children.get(0).getText()).isEqualTo("A div containing");54}5556@Test57void testFindElementByXPathWhenNoMatch() {58driver.get(pages.nestedPage);59WebElement element = driver.findElement(By.name("form2"));60assertThatExceptionOfType(NoSuchElementException.class)61.isThrownBy(() -> element.findElement(By.xpath(".//select/x")));62}6364@Test65void testFindElementsByXPath() {66driver.get(pages.nestedPage);67WebElement element = driver.findElement(By.name("form2"));68List<WebElement> children = element.findElements(By.xpath("select/option"));69assertThat(children).hasSize(8);70assertThat(children.get(0).getText()).isEqualTo("One");71assertThat(children.get(1).getText()).isEqualTo("Two");72}7374@Test75void testFindElementsByXPathWhenNoMatch() {76driver.get(pages.nestedPage);77WebElement element = driver.findElement(By.name("form2"));78List<WebElement> children = element.findElements(By.xpath(".//select/x"));79assertThat(children).isEmpty();80}8182@Test83void testFindElementByName() {84driver.get(pages.nestedPage);85WebElement element = driver.findElement(By.name("form2"));86WebElement child = element.findElement(By.name("selectomatic"));87assertThat(child.getAttribute("id")).isEqualTo("2");88}8990@Test91void testFindElementsByName() {92driver.get(pages.nestedPage);93WebElement element = driver.findElement(By.name("form2"));94List<WebElement> children = element.findElements(By.name("selectomatic"));95assertThat(children).hasSize(2);96}9798@Test99void testFindElementById() {100driver.get(pages.nestedPage);101WebElement element = driver.findElement(By.name("form2"));102WebElement child = element.findElement(By.id("2"));103assertThat(child.getAttribute("name")).isEqualTo("selectomatic");104}105106@Test107void testFindElementByIdWhenMultipleMatchesExist() {108driver.get(pages.nestedPage);109WebElement element = driver.findElement(By.id("test_id_div"));110WebElement child = element.findElement(By.id("test_id"));111assertThat(child.getText()).isEqualTo("inside");112}113114@Test115void testFindElementByIdWhenIdContainsNonAlphanumericCharacters() {116driver.get(pages.nestedPage);117WebElement element = driver.findElement(By.id("test_special_chars"));118WebElement childWithSpaces = element.findElement(By.id("white space"));119assertThat(childWithSpaces.getText()).isEqualTo("space");120WebElement childWithCssChars = element.findElement(By.id("css#.chars"));121assertThat(childWithCssChars.getText()).isEqualTo("css escapes");122}123124@Test125void testFindElementByIdWhenNoMatchInContext() {126driver.get(pages.nestedPage);127WebElement element = driver.findElement(By.id("test_id_div"));128assertThatExceptionOfType(NoSuchElementException.class)129.isThrownBy(() -> element.findElement(By.id("test_id_out")));130}131132@Test133void testFindElementsById() {134driver.get(pages.nestedPage);135WebElement element = driver.findElement(By.name("form2"));136List<WebElement> children = element.findElements(By.id("2"));137assertThat(children).hasSize(2);138}139140@Test141void testFindElementsByIdWithNonAlphanumericCharacters() {142driver.get(pages.nestedPage);143WebElement element = driver.findElement(By.id("test_special_chars"));144List<WebElement> children = element.findElements(By.id("white space"));145assertThat(children).hasSize(1);146List<WebElement> children2 = element.findElements(By.id("css#.chars"));147assertThat(children2).hasSize(1);148}149150@Test151void testFindElementByLinkText() {152driver.get(pages.nestedPage);153WebElement element = driver.findElement(By.name("div1"));154WebElement child = element.findElement(By.linkText("hello world"));155List<WebElement> invalidChildren = element.findElements(By.linkText("HellO WorLD"));156assertThat(invalidChildren).isEmpty();157assertThat(child.getAttribute("name")).isEqualTo("link1");158}159160@Test161void testFindElementsByLinkTest() {162driver.get(pages.nestedPage);163WebElement element = driver.findElement(By.name("div1"));164List<WebElement> elements = element.findElements(By.linkText("hello world"));165166assertThat(elements).hasSize(2);167assertThat(elements.get(0).getAttribute("name")).isEqualTo("link1");168assertThat(elements.get(1).getAttribute("name")).isEqualTo("link2");169}170171@Test172void testShouldFindChildElementsById() {173driver.get(pages.nestedPage);174WebElement parent = driver.findElement(By.id("test_id_div"));175WebElement element = parent.findElement(By.id("test_id"));176assertThat(element.getText()).isEqualTo("inside");177}178179@Test180void testShouldNotReturnRootElementWhenFindingChildrenById() {181driver.get(pages.nestedPage);182WebElement parent = driver.findElement(By.id("test_id"));183184assertThat(parent.findElements(By.id("test_id"))).isEmpty();185assertThatExceptionOfType(NoSuchElementException.class)186.isThrownBy(() -> parent.findElement(By.id("test_id")));187}188189@Test190void testShouldFindChildElementsByClassName() {191driver.get(pages.nestedPage);192WebElement parent = driver.findElement(By.name("classes"));193194WebElement element = parent.findElement(By.className("one"));195196assertThat(element.getText()).isEqualTo("Find me");197}198199@Test200void testShouldFindChildrenByClassName() {201driver.get(pages.nestedPage);202WebElement parent = driver.findElement(By.name("classes"));203204List<WebElement> elements = parent.findElements(By.className("one"));205206assertThat(elements).hasSize(2);207}208209@Test210void testShouldFindChildElementsByTagName() {211driver.get(pages.nestedPage);212WebElement parent = driver.findElement(By.name("div1"));213214WebElement element = parent.findElement(By.tagName("a"));215216assertThat(element.getAttribute("name")).isEqualTo("link1");217}218219@Test220void testShouldFindChildrenByTagName() {221driver.get(pages.nestedPage);222WebElement parent = driver.findElement(By.name("div1"));223224List<WebElement> elements = parent.findElements(By.tagName("a"));225226assertThat(elements).hasSize(2);227}228229@Test230void testShouldBeAbleToFindAnElementByCssSelector() {231driver.get(pages.nestedPage);232WebElement parent = driver.findElement(By.name("form2"));233234WebElement element = parent.findElement(By.cssSelector("*[name=\"selectomatic\"]"));235236assertThat(element.getAttribute("id")).isEqualTo("2");237}238239@Test240void testShouldBeAbleToFindAnElementByCss3Selector() {241driver.get(pages.nestedPage);242WebElement parent = driver.findElement(By.name("form2"));243244WebElement element = parent.findElement(By.cssSelector("*[name^=\"selecto\"]"));245246assertThat(element.getAttribute("id")).isEqualTo("2");247}248249@Test250void testShouldBeAbleToFindElementsByCssSelector() {251driver.get(pages.nestedPage);252WebElement parent = driver.findElement(By.name("form2"));253254List<WebElement> elements = parent.findElements(By.cssSelector("*[name=\"selectomatic\"]"));255256assertThat(elements).hasSize(2);257}258259@Test260void testShouldBeAbleToFindChildrenOfANode() {261driver.get(pages.selectableItemsPage);262List<WebElement> elements = driver.findElements(By.xpath("/html/head"));263WebElement head = elements.get(0);264List<WebElement> importedScripts = head.findElements(By.tagName("script"));265assertThat(importedScripts).hasSize(3);266}267268@Test269void testReturnAnEmptyListWhenThereAreNoChildrenOfANode() {270driver.get(pages.xhtmlTestPage);271WebElement table = driver.findElement(By.id("table"));272List<WebElement> rows = table.findElements(By.tagName("tr"));273274assertThat(rows).isEmpty();275}276277@Test278void testShouldFindGrandChildren() {279driver.get(pages.formPage);280WebElement form = driver.findElement(By.id("nested_form"));281form.findElement(By.name("x"));282}283284@Test285void testShouldNotFindElementOutSideTree() {286driver.get(pages.formPage);287WebElement element = driver.findElement(By.name("login"));288assertThatExceptionOfType(NoSuchElementException.class)289.isThrownBy(() -> element.findElement(By.name("x")));290}291292@Test293void testFindingByTagNameShouldNotIncludeParentElementIfSameTagType() {294driver.get(pages.xhtmlTestPage);295WebElement parent = driver.findElement(By.id("my_span"));296297assertThat(parent.findElements(By.tagName("div"))).hasSize(2);298assertThat(parent.findElements(By.tagName("span"))).hasSize(2);299}300301@Test302void testFindingByCssShouldNotIncludeParentElementIfSameTagType() {303driver.get(pages.xhtmlTestPage);304WebElement parent = driver.findElement(By.cssSelector("div#parent"));305WebElement child = parent.findElement(By.cssSelector("div"));306307assertThat(child.getAttribute("id")).isEqualTo("child");308}309310@Test311void testFindMultipleElements() {312driver.get(pages.simpleTestPage);313WebElement elem = driver.findElement(By.id("links"));314315List<WebElement> elements = elem.findElements(By.partialLinkText("link"));316assertThat(elements).hasSize(6);317}318319@Test320@NotYetImplemented(SAFARI)321public void testLinkWithLeadingSpaces() {322driver.get(pages.simpleTestPage);323WebElement elem = driver.findElement(By.id("links"));324325WebElement res = elem.findElement(By.partialLinkText("link with leading space"));326assertThat(res.getText()).isEqualTo("link with leading space");327}328329@Test330@NotYetImplemented(SAFARI)331public void testLinkWithTrailingSpace() {332driver.get(pages.simpleTestPage);333WebElement elem = driver.findElement(By.id("links"));334335WebElement res = elem.findElement(By.partialLinkText("link with trailing space"));336assertThat(res.getText()).isEqualTo("link with trailing space");337}338339@Test340void testElementCanGetLinkByLinkTestIgnoringTrailingWhitespace() {341driver.get(pages.simpleTestPage);342WebElement elem = driver.findElement(By.id("links"));343344WebElement link = elem.findElement(By.linkText("link with trailing space"));345assertThat(link.getAttribute("id")).isEqualTo("linkWithTrailingSpace");346}347}348349350