Path: blob/trunk/dotnet/test/common/ChildrenFindingTest.cs
2868 views
// <copyright file="ChildrenFindingTest.cs" company="Selenium Committers"> // Licensed to the Software Freedom Conservancy (SFC) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The SFC licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. // </copyright> using NUnit.Framework; using System.Collections.ObjectModel; namespace OpenQA.Selenium; [TestFixture] public class ChildrenFindingTest : DriverTestFixture { [Test] public void FindElementByXPath() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); IWebElement child = element.FindElement(By.XPath("select")); Assert.That(child.GetAttribute("id"), Is.EqualTo("2")); } [Test] public void FindingElementsOnElementByXPathShouldFindTopLevelElements() { driver.Url = simpleTestPage; IWebElement parent = driver.FindElement(By.Id("multiline")); ReadOnlyCollection<IWebElement> allParaElements = driver.FindElements(By.XPath("//p")); ReadOnlyCollection<IWebElement> children = parent.FindElements(By.XPath("//p")); Assert.That(children, Has.Exactly(allParaElements.Count).Items); } [Test] public void FindingDotSlashElementsOnElementByXPathShouldFindNotTopLevelElements() { driver.Url = simpleTestPage; IWebElement parent = driver.FindElement(By.Id("multiline")); ReadOnlyCollection<IWebElement> children = parent.FindElements(By.XPath("./p")); Assert.That(children, Has.One.Items); Assert.That(children[0].Text, Is.EqualTo("A div containing")); } [Test] public void FindElementByXPathWhenNoMatch() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); Assert.That( () => element.FindElement(By.XPath("select/x")), Throws.InstanceOf<NoSuchElementException>()); } [Test] public void FindElementsByXPath() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); ReadOnlyCollection<IWebElement> children = element.FindElements(By.XPath("select/option")); Assert.That(children, Has.Exactly(8).Items); Assert.That(children[0].Text, Is.EqualTo("One")); Assert.That(children[1].Text, Is.EqualTo("Two")); } [Test] public void FindElementsByXPathWhenNoMatch() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); ReadOnlyCollection<IWebElement> children = element.FindElements(By.XPath("select/x")); Assert.That(children, Is.Empty); } [Test] public void FindElementByName() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); IWebElement child = element.FindElement(By.Name("selectomatic")); Assert.That(child.GetAttribute("id"), Is.EqualTo("2")); } [Test] public void FindElementsByName() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); ReadOnlyCollection<IWebElement> children = element.FindElements(By.Name("selectomatic")); Assert.That(children, Has.Exactly(2).Items); } [Test] public void FindElementById() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); IWebElement child = element.FindElement(By.Id("2")); Assert.That(child.GetAttribute("name"), Is.EqualTo("selectomatic")); } [Test] public void FindElementByIdWhenMultipleMatchesExist() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Id("test_id_div")); IWebElement child = element.FindElement(By.Id("test_id")); Assert.That(child.Text, Is.EqualTo("inside")); } [Test] public void FindElementByIdWhenIdContainsNonAlphanumericCharacters() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Id("test_special_chars")); IWebElement childWithSpaces = element.FindElement(By.Id("white space")); Assert.That(childWithSpaces.Text, Does.Contain("space")); IWebElement childWithCssChars = element.FindElement(By.Id("css#.chars")); Assert.That(childWithCssChars.Text, Is.EqualTo("css escapes")); } [Test] public void FindElementByIdWhenNoMatchInContext() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Id("test_id_div")); Assert.That( () => element.FindElement(By.Id("test_id_out")), Throws.InstanceOf<NoSuchElementException>()); } [Test] public void FindElementsById() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("form2")); ReadOnlyCollection<IWebElement> children = element.FindElements(By.Id("2")); Assert.That(children, Has.Exactly(2).Items); } [Test] public void FindElementsByIdWithNonAlphanumericCharacters() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Id("test_special_chars")); ReadOnlyCollection<IWebElement> children = element.FindElements(By.Id("white space")); Assert.That(children, Has.One.Items); ReadOnlyCollection<IWebElement> children2 = element.FindElements(By.Id("css#.chars")); Assert.That(children2, Has.One.Items); } [Test] public void FindElementByLinkText() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("div1")); IWebElement child = element.FindElement(By.LinkText("hello world")); Assert.That(child.GetAttribute("name"), Is.EqualTo("link1")); } [Test] public void FindElementsByLinkText() { driver.Url = nestedPage; IWebElement element = driver.FindElement(By.Name("div1")); ReadOnlyCollection<IWebElement> elements = element.FindElements(By.LinkText("hello world")); Assert.That(elements, Has.Exactly(2).Items); Assert.That(elements[0].GetAttribute("name"), Is.EqualTo("link1")); Assert.That(elements[1].GetAttribute("name"), Is.EqualTo("link2")); } [Test] public void ShouldFindChildElementsById() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Id("test_id_div")); IWebElement element = parent.FindElement(By.Id("test_id")); Assert.That(element.Text, Is.EqualTo("inside")); } [Test] public void ShouldNotReturnRootElementWhenFindingChildrenById() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Id("test_id")); Assert.That(parent.FindElements(By.Id("test_id")), Is.Empty); Assert.That( () => parent.FindElement(By.Id("test_id")), Throws.InstanceOf<NoSuchElementException>()); } [Test] public void ShouldFindChildElementsByClassName() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Name("classes")); IWebElement element = parent.FindElement(By.ClassName("one")); Assert.That(element.Text, Is.EqualTo("Find me")); } [Test] public void ShouldFindChildrenByClassName() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Name("classes")); ReadOnlyCollection<IWebElement> elements = parent.FindElements(By.ClassName("one")); Assert.That(elements, Has.Exactly(2).Items); } [Test] public void ShouldFindChildElementsByTagName() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Name("div1")); IWebElement element = parent.FindElement(By.TagName("a")); Assert.That(element.GetAttribute("name"), Is.EqualTo("link1")); } [Test] public void ShouldFindChildrenByTagName() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Name("div1")); ReadOnlyCollection<IWebElement> elements = parent.FindElements(By.TagName("a")); Assert.That(elements, Has.Exactly(2).Items); } [Test] public void ShouldBeAbleToFindAnElementByCssSelector() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Name("form2")); IWebElement element = parent.FindElement(By.CssSelector("*[name=\"selectomatic\"]")); Assert.That(element.GetAttribute("id"), Is.EqualTo("2")); } [Test] public void ShouldBeAbleToFindAnElementByCss3Selector() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Name("form2")); IWebElement element = parent.FindElement(By.CssSelector("*[name^=\"selecto\"]")); Assert.That(element.GetAttribute("id"), Is.EqualTo("2")); } [Test] public void ShouldBeAbleToFindElementsByCssSelector() { driver.Url = nestedPage; IWebElement parent = driver.FindElement(By.Name("form2")); ReadOnlyCollection<IWebElement> elements = parent.FindElements(By.CssSelector("*[name=\"selectomatic\"]")); Assert.That(elements, Has.Exactly(2).Items); } [Test] public void ShouldBeAbleToFindChildrenOfANode() { driver.Url = selectableItemsPage; ReadOnlyCollection<IWebElement> elements = driver.FindElements(By.XPath("/html/head")); IWebElement head = elements[0]; ReadOnlyCollection<IWebElement> importedScripts = head.FindElements(By.TagName("script")); Assert.That(importedScripts, Has.Exactly(3).Items); } [Test] public void ReturnAnEmptyListWhenThereAreNoChildrenOfANode() { driver.Url = xhtmlTestPage; IWebElement table = driver.FindElement(By.Id("table")); ReadOnlyCollection<IWebElement> rows = table.FindElements(By.TagName("tr")); Assert.That(rows, Is.Empty); } [Test] public void ShouldFindGrandChildren() { driver.Url = formsPage; IWebElement form = driver.FindElement(By.Id("nested_form")); form.FindElement(By.Name("x")); } [Test] public void ShouldNotFindElementOutSideTree() { driver.Url = formsPage; IWebElement element = driver.FindElement(By.Name("login")); Assert.That( () => element.FindElement(By.Name("x")), Throws.InstanceOf<NoSuchElementException>()); } [Test] public void FindingByTagNameShouldNotIncludeParentElementIfSameTagType() { driver.Url = xhtmlTestPage; IWebElement parent = driver.FindElement(By.Id("my_span")); Assert.That(parent.FindElements(By.TagName("div")), Has.Exactly(2).Items); Assert.That(parent.FindElements(By.TagName("span")), Has.Exactly(2).Items); } [Test] public void FindingByCssShouldNotIncludeParentElementIfSameTagType() { driver.Url = xhtmlTestPage; IWebElement parent = driver.FindElement(By.CssSelector("div#parent")); IWebElement child = parent.FindElement(By.CssSelector("div")); Assert.That(child.GetAttribute("id"), Is.EqualTo("child")); } [Test] public void FindMultipleElements() { driver.Url = simpleTestPage; IWebElement elem = driver.FindElement(By.Id("links")); ReadOnlyCollection<IWebElement> elements = elem.FindElements(By.PartialLinkText("link")); Assert.That(elements, Is.Not.Null); Assert.That(elements, Has.Exactly(6).Items); } [Test] [IgnoreBrowser(Browser.Safari, "Safari does not trim")] public void LinkWithLeadingSpaces() { driver.Url = simpleTestPage; IWebElement elem = driver.FindElement(By.Id("links")); IWebElement res = elem.FindElement(By.PartialLinkText("link with leading space")); Assert.That(res.Text, Is.EqualTo("link with leading space")); } [Test] [IgnoreBrowser(Browser.Safari, "Safari does not trim")] public void LinkWithTrailingSpace() { driver.Url = simpleTestPage; IWebElement elem = driver.FindElement(By.Id("links")); IWebElement res = elem.FindElement(By.PartialLinkText("link with trailing space")); Assert.That(res.Text, Is.EqualTo("link with trailing space")); } [Test] public void ElementCanGetLinkByLinkTestIgnoringTrailingWhitespace() { driver.Url = simpleTestPage; IWebElement elem = driver.FindElement(By.Id("links")); IWebElement link = elem.FindElement(By.LinkText("link with trailing space")); Assert.That(link.GetAttribute("id"), Is.EqualTo("linkWithTrailingSpace")); } }