Path: blob/trunk/dotnet/test/common/ElementAttributeTest.cs
2868 views
// <copyright file="ElementAttributeTest.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 OpenQA.Selenium.Environment; using System; using System.Collections.Generic; using System.Collections.ObjectModel; namespace OpenQA.Selenium; [TestFixture] public class ElementAttributeTest : DriverTestFixture { [Test] public void ShouldReturnNullWhenGettingTheValueOfAnAttributeThatIsNotListed() { driver.Url = simpleTestPage; IWebElement head = driver.FindElement(By.XPath("/html")); string attribute = head.GetAttribute("cheese"); Assert.That(attribute, Is.Null); } [Test] public void ShouldReturnNullWhenGettingSrcAttributeOfInvalidImgTag() { driver.Url = simpleTestPage; IWebElement img = driver.FindElement(By.Id("invalidImgTag")); string attribute = img.GetAttribute("src"); Assert.That(attribute, Is.Null); } [Test] public void ShouldReturnAnAbsoluteUrlWhenGettingSrcAttributeOfAValidImgTag() { driver.Url = simpleTestPage; IWebElement img = driver.FindElement(By.Id("validImgTag")); string attribute = img.GetAttribute("src"); Assert.That(attribute, Is.EqualTo(EnvironmentManager.Instance.UrlBuilder.WhereIs("icon.gif"))); } [Test] public void ShouldReturnAnAbsoluteUrlWhenGettingHrefAttributeOfAValidAnchorTag() { driver.Url = simpleTestPage; IWebElement img = driver.FindElement(By.Id("validAnchorTag")); string attribute = img.GetAttribute("href"); Assert.That(attribute, Is.EqualTo(EnvironmentManager.Instance.UrlBuilder.WhereIs("icon.gif"))); } [Test] public void ShouldReturnEmptyAttributeValuesWhenPresentAndTheValueIsActuallyEmpty() { driver.Url = simpleTestPage; IWebElement body = driver.FindElement(By.XPath("//body")); Assert.That(body.GetAttribute("style"), Is.Empty); } [Test] public void ShouldReturnTheValueOfTheDisabledAttributeAsNullIfNotSet() { driver.Url = formsPage; IWebElement inputElement = driver.FindElement(By.XPath("//input[@id='working']")); Assert.That(inputElement.GetAttribute("disabled"), Is.Null); Assert.That(inputElement.Enabled, "Element is not enabled"); IWebElement pElement = driver.FindElement(By.Id("peas")); Assert.That(inputElement.GetAttribute("disabled"), Is.Null); Assert.That(inputElement.Enabled, "Element is not enabled"); } [Test] public void ShouldReturnTheValueOfTheIndexAttrbuteEvenIfItIsMissing() { driver.Url = formsPage; IWebElement multiSelect = driver.FindElement(By.Id("multi")); ReadOnlyCollection<IWebElement> options = multiSelect.FindElements(By.TagName("option")); Assert.That(options[1].GetAttribute("index"), Is.EqualTo("1")); } [Test] public void ShouldIndicateTheElementsThatAreDisabledAreNotEnabled() { driver.Url = formsPage; IWebElement inputElement = driver.FindElement(By.XPath("//input[@id='notWorking']")); Assert.That(inputElement.Enabled, Is.False, "Element should be disabled"); inputElement = driver.FindElement(By.XPath("//input[@id='working']")); Assert.That(inputElement.Enabled, Is.True, "Element should be enabled"); } [Test] public void ElementsShouldBeDisabledIfTheyAreDisabledUsingRandomDisabledStrings() { driver.Url = formsPage; IWebElement disabledTextElement1 = driver.FindElement(By.Id("disabledTextElement1")); Assert.That(disabledTextElement1.Enabled, Is.False, "disabledTextElement1 should be disabled"); IWebElement disabledTextElement2 = driver.FindElement(By.Id("disabledTextElement2")); Assert.That(disabledTextElement2.Enabled, Is.False, "disabledTextElement2 should be disabled"); IWebElement disabledSubmitElement = driver.FindElement(By.Id("disabledSubmitElement")); Assert.That(disabledSubmitElement.Enabled, Is.False, "disabledSubmitElement should be disabled"); } [Test] public void ShouldThrowExceptionIfSendingKeysToElementDisabledUsingRandomDisabledStrings() { driver.Url = formsPage; IWebElement disabledTextElement1 = driver.FindElement(By.Id("disabledTextElement1")); Assert.That(() => { disabledTextElement1.SendKeys("foo"); }, Throws.TypeOf<ElementNotInteractableException>()); Assert.That(disabledTextElement1.Text, Is.Empty); IWebElement disabledTextElement2 = driver.FindElement(By.Id("disabledTextElement2")); Assert.That( () => disabledTextElement2.SendKeys("bar"), Throws.TypeOf<ElementNotInteractableException>()); Assert.That(disabledTextElement2.Text, Is.Empty); } [Test] public void ShouldIndicateWhenATextAreaIsDisabled() { driver.Url = formsPage; IWebElement textArea = driver.FindElement(By.XPath("//textarea[@id='notWorkingArea']")); Assert.That(textArea.Enabled, Is.False); } [Test] public void ShouldIndicateWhenASelectIsDisabled() { driver.Url = formsPage; IWebElement enabled = driver.FindElement(By.Name("selectomatic")); IWebElement disabled = driver.FindElement(By.Name("no-select")); Assert.That(enabled.Enabled, Is.True, "Expected select element to be enabled"); Assert.That(disabled.Enabled, Is.False, "Expected select element to be disabled"); } [Test] public void ShouldReturnTheValueOfCheckedForACheckboxOnlyIfItIsChecked() { driver.Url = formsPage; IWebElement checkbox = driver.FindElement(By.XPath("//input[@id='checky']")); Assert.That(checkbox.GetAttribute("checked"), Is.Null); checkbox.Click(); Assert.That(checkbox.GetAttribute("checked"), Is.EqualTo("true")); } [Test] public void ShouldOnlyReturnTheValueOfSelectedForRadioButtonsIfItIsSet() { driver.Url = formsPage; IWebElement neverSelected = driver.FindElement(By.Id("cheese")); IWebElement initiallyNotSelected = driver.FindElement(By.Id("peas")); IWebElement initiallySelected = driver.FindElement(By.Id("cheese_and_peas")); Assert.That(neverSelected.GetAttribute("selected"), Is.Null, "false"); Assert.That(initiallyNotSelected.GetAttribute("selected"), Is.Null, "false"); Assert.That(initiallySelected.GetAttribute("selected"), Is.EqualTo("true"), "true"); initiallyNotSelected.Click(); Assert.That(neverSelected.GetAttribute("selected"), Is.Null); Assert.That(initiallyNotSelected.GetAttribute("selected"), Is.EqualTo("true")); Assert.That(initiallySelected.GetAttribute("selected"), Is.Null); } [Test] public void ShouldReturnTheValueOfSelectedForOptionsOnlyIfTheyAreSelected() { driver.Url = formsPage; IWebElement selectBox = driver.FindElement(By.XPath("//select[@name='selectomatic']")); ReadOnlyCollection<IWebElement> options = selectBox.FindElements(By.TagName("option")); IWebElement one = options[0]; IWebElement two = options[1]; Assert.That(one.Selected, Is.True); Assert.That(two.Selected, Is.False); Assert.That(one.GetAttribute("selected"), Is.EqualTo("true")); Assert.That(two.GetAttribute("selected"), Is.Null); } [Test] public void ShouldReturnValueOfClassAttributeOfAnElement() { driver.Url = xhtmlTestPage; IWebElement heading = driver.FindElement(By.XPath("//h1")); String className = heading.GetAttribute("class"); Assert.That(className, Is.EqualTo("header")); } [Test] public void ShouldReturnTheContentsOfATextAreaAsItsValue() { driver.Url = formsPage; String value = driver.FindElement(By.Id("withText")).GetAttribute("value"); Assert.That(value, Is.EqualTo("Example text")); } [Test] public void ShouldReturnInnerHtml() { driver.Url = simpleTestPage; string html = driver.FindElement(By.Id("wrappingtext")).GetAttribute("innerHTML"); Assert.That(html, Does.Contain("<tbody>")); } [Test] public void ShouldTreatReadonlyAsAValue() { driver.Url = formsPage; IWebElement element = driver.FindElement(By.Name("readonly")); string readOnlyAttribute = element.GetAttribute("readonly"); Assert.That(readOnlyAttribute, Is.Not.Null); IWebElement textInput = driver.FindElement(By.Name("x")); string notReadOnly = textInput.GetAttribute("readonly"); Assert.That(notReadOnly, Is.Null); } [Test] public void ShouldReturnHiddenTextForTextContentAttribute() { driver.Url = simpleTestPage; IWebElement element = driver.FindElement(By.Id("hiddenline")); string textContent = element.GetAttribute("textContent"); Assert.That(textContent, Is.EqualTo("A hidden line of text")); } [Test] public void ShouldGetNumericAtribute() { driver.Url = formsPage; IWebElement element = driver.FindElement(By.Id("withText")); Assert.That(element.GetAttribute("rows"), Is.EqualTo("5")); } [Test] public void CanReturnATextApproximationOfTheStyleAttribute() { driver.Url = javascriptPage; string style = driver.FindElement(By.Id("red-item")).GetAttribute("style"); Assert.That(style.ToLower(), Does.Contain("background-color")); } public void ShouldCorrectlyReportValueOfColspan() { driver.Url = tables; System.Threading.Thread.Sleep(1000); IWebElement th1 = driver.FindElement(By.Id("th1")); IWebElement td2 = driver.FindElement(By.Id("td2")); Assert.That(th1.GetAttribute("id"), Is.EqualTo("th1"), "th1 id"); Assert.That(th1.GetAttribute("colspan"), Is.EqualTo("3"), "th1 colspan should be 3"); Assert.That(td2.GetAttribute("id"), Is.EqualTo("td2"), "td2 id"); Assert.That(td2.GetAttribute("colspan"), Is.EqualTo("2"), "td2 colspan should be 2"); } // This is a test-case re-creating issue 900. [Test] public void ShouldReturnValueOfOnClickAttribute() { driver.Url = javascriptPage; IWebElement mouseclickDiv = driver.FindElement(By.Id("mouseclick")); string onClickValue = mouseclickDiv.GetAttribute("onclick"); string expectedOnClickValue = "displayMessage('mouse click');"; List<string> acceptableOnClickValues = new List<string>(); acceptableOnClickValues.Add("javascript:" + expectedOnClickValue); acceptableOnClickValues.Add("function anonymous()\n{\n" + expectedOnClickValue + "\n}"); acceptableOnClickValues.Add("function onclick()\n{\n" + expectedOnClickValue + "\n}"); Assert.That(acceptableOnClickValues, Contains.Item(onClickValue)); IWebElement mousedownDiv = driver.FindElement(By.Id("mousedown")); Assert.That(mousedownDiv.GetAttribute("onclick"), Is.Null); } [Test] public void GetAttributeDoesNotReturnAnObjectForSvgProperties() { if (TestUtilities.IsOldIE(driver)) { Assert.Ignore("IE8 and earlier do not support SVG"); } driver.Url = svgPage; IWebElement svgElement = driver.FindElement(By.Id("rotate")); Assert.That(svgElement.GetAttribute("transform"), Is.EqualTo("rotate(30)")); } [Test] public void CanRetrieveTheCurrentValueOfATextFormField_textInput() { driver.Url = formsPage; IWebElement element = driver.FindElement(By.Id("working")); Assert.That(element.GetAttribute("value"), Is.Empty); element.SendKeys("hello world"); Assert.That(element.GetAttribute("value"), Is.EqualTo("hello world")); } [Test] public void CanRetrieveTheCurrentValueOfATextFormField_emailInput() { driver.Url = formsPage; IWebElement element = driver.FindElement(By.Id("email")); Assert.That(element.GetAttribute("value"), Is.Empty); element.SendKeys("hello world"); Assert.That(element.GetAttribute("value"), Is.EqualTo("hello world")); } [Test] public void CanRetrieveTheCurrentValueOfATextFormField_textArea() { driver.Url = formsPage; IWebElement element = driver.FindElement(By.Id("emptyTextArea")); Assert.That(element.GetAttribute("value"), Is.Empty); element.SendKeys("hello world"); Assert.That(element.GetAttribute("value"), Is.EqualTo("hello world")); } [Test] public void ShouldReturnNullForNonPresentBooleanAttributes() { driver.Url = booleanAttributes; IWebElement element1 = driver.FindElement(By.Id("working")); Assert.That(element1.GetAttribute("required"), Is.Null); IWebElement element2 = driver.FindElement(By.Id("wallace")); Assert.That(element2.GetAttribute("nowrap"), Is.Null); } [Test] public void ShouldReturnTrueForPresentBooleanAttributes() { driver.Url = booleanAttributes; IWebElement element1 = driver.FindElement(By.Id("emailRequired")); Assert.That(element1.GetAttribute("required"), Is.EqualTo("true")); IWebElement element2 = driver.FindElement(By.Id("emptyTextAreaRequired")); Assert.That(element2.GetAttribute("required"), Is.EqualTo("true")); IWebElement element3 = driver.FindElement(By.Id("inputRequired")); Assert.That(element3.GetAttribute("required"), Is.EqualTo("true")); IWebElement element4 = driver.FindElement(By.Id("textAreaRequired")); Assert.That(element4.GetAttribute("required"), Is.EqualTo("true")); IWebElement element5 = driver.FindElement(By.Id("unwrappable")); Assert.That(element5.GetAttribute("nowrap"), Is.EqualTo("true")); } [Test] public void MultipleAttributeShouldBeNullWhenNotSet() { driver.Url = selectPage; IWebElement element = driver.FindElement(By.Id("selectWithoutMultiple")); Assert.That(element.GetAttribute("multiple"), Is.Null); } [Test] public void MultipleAttributeShouldBeTrueWhenSet() { driver.Url = selectPage; IWebElement element = driver.FindElement(By.Id("selectWithMultipleEqualsMultiple")); Assert.That(element.GetAttribute("multiple"), Is.EqualTo("true")); } [Test] public void MultipleAttributeShouldBeTrueWhenSelectHasMultipleWithValueAsBlank() { driver.Url = selectPage; IWebElement element = driver.FindElement(By.Id("selectWithEmptyStringMultiple")); Assert.That(element.GetAttribute("multiple"), Is.EqualTo("true")); } [Test] public void MultipleAttributeShouldBeTrueWhenSelectHasMultipleWithoutAValue() { driver.Url = selectPage; IWebElement element = driver.FindElement(By.Id("selectWithMultipleWithoutValue")); Assert.That(element.GetAttribute("multiple"), Is.EqualTo("true")); } [Test] public void MultipleAttributeShouldBeTrueWhenSelectHasMultipleWithValueAsSomethingElse() { driver.Url = selectPage; IWebElement element = driver.FindElement(By.Id("selectWithRandomMultipleValue")); Assert.That(element.GetAttribute("multiple"), Is.EqualTo("true")); } [Test] public void GetAttributeOfUserDefinedProperty() { driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("userDefinedProperty.html"); IWebElement element = driver.FindElement(By.Id("d")); Assert.That(element.GetAttribute("dynamicProperty"), Is.EqualTo("sampleValue")); } [Test] public void ShouldReturnValueOfClassAttributeOfAnElementAfterSwitchingIFrame() { driver.Url = iframePage; driver.SwitchTo().Frame("iframe1"); IWebElement wallace = driver.FindElement(By.XPath("//div[@id='wallace']")); String className = wallace.GetAttribute("class"); Assert.That(className, Is.EqualTo("gromit")); } }