Path: blob/trunk/dotnet/test/support/UI/SelectBrowserTests.cs
4505 views
// <copyright file="SelectBrowserTests.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 System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NUnit.Framework;
using OpenQA.Selenium.Environment;
namespace OpenQA.Selenium.Support.UI;
[TestFixture]
public class SelectBrowserTests : DriverTestFixture
{
[OneTimeSetUp]
public async Task RunBeforeAnyTestAsync()
{
await EnvironmentManager.Instance.WebServer.StartAsync();
}
[OneTimeTearDown]
public async Task RunAfterAnyTestsAsync()
{
EnvironmentManager.Instance.CloseCurrentDriver();
await EnvironmentManager.Instance.WebServer.StopAsync();
}
[SetUp]
public void Setup()
{
driver.Url = formsPage;
}
[Test]
public void ShouldThrowAnExceptionIfTheElementIsNotASelectElement()
{
IWebElement element = driver.FindElement(By.Name("checky"));
Assert.That(
() => new SelectElement(element),
Throws.TypeOf<UnexpectedTagNameException>());
}
[Test]
public void ShouldIndicateThatASelectCanSupportMultipleOptions()
{
IWebElement element = driver.FindElement(By.Name("multi"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(elementWrapper.IsMultiple, Is.True);
}
[Test]
public void ShouldIndicateThatASelectCanSupportMultipleOptionsWithEmptyMultipleAttribute()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(elementWrapper.IsMultiple, Is.True);
}
[Test]
public void ShouldIndicateThatASelectCanSupportMultipleOptionsWithTrueMultipleAttribute()
{
IWebElement element = driver.FindElement(By.Name("multi_true"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(elementWrapper.IsMultiple, Is.True);
}
[Test]
public void ShouldNotIndicateThatANormalSelectSupportsMulitpleOptions()
{
IWebElement element = driver.FindElement(By.Name("selectomatic"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(elementWrapper.IsMultiple, Is.False);
}
[Test]
public void ShouldIndicateThatASelectCanSupportMultipleOptionsWithFalseMultipleAttribute()
{
IWebElement element = driver.FindElement(By.Name("multi_false"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(elementWrapper.IsMultiple, Is.True);
}
[Test]
public void ShouldReturnAllOptionsWhenAsked()
{
IWebElement element = driver.FindElement(By.Name("selectomatic"));
SelectElement elementWrapper = new SelectElement(element);
IList<IWebElement> returnedOptions = elementWrapper.Options;
Assert.That(returnedOptions, Has.Exactly(4).Items);
string one = returnedOptions[0].Text;
Assert.That(one, Is.EqualTo("One"));
string two = returnedOptions[1].Text;
Assert.That(two, Is.EqualTo("Two"));
string three = returnedOptions[2].Text;
Assert.That(three, Is.EqualTo("Four"));
string four = returnedOptions[3].Text;
Assert.That(four, Is.EqualTo("Still learning how to count, apparently"));
}
[Test]
public void ShouldReturnOptionWhichIsSelected()
{
IWebElement element = driver.FindElement(By.Name("selectomatic"));
SelectElement elementWrapper = new SelectElement(element);
IList<IWebElement> returnedOptions = elementWrapper.AllSelectedOptions;
Assert.That(returnedOptions, Has.One.Items);
string one = returnedOptions[0].Text;
Assert.That(one, Is.EqualTo("One"));
}
[Test]
public void ShouldReturnOptionsWhichAreSelected()
{
IWebElement element = driver.FindElement(By.Name("multi"));
SelectElement elementWrapper = new SelectElement(element);
IList<IWebElement> returnedOptions = elementWrapper.AllSelectedOptions;
Assert.That(returnedOptions, Has.Exactly(2).Items);
string one = returnedOptions[0].Text;
Assert.That(one, Is.EqualTo("Eggs"));
string two = returnedOptions[1].Text;
Assert.That(two, Is.EqualTo("Sausages"));
}
[Test]
public void ShouldReturnFirstSelectedOption()
{
IWebElement element = driver.FindElement(By.Name("multi"));
SelectElement elementWrapper = new SelectElement(element);
IWebElement firstSelected = elementWrapper.AllSelectedOptions[0];
Assert.That(firstSelected.Text, Is.EqualTo("Eggs"));
}
//[Test]
// [ExpectedException(typeof(NoSuchElementException))]
// The .NET bindings do not have a "FirstSelectedOption" property,
// and no one has asked for it to this point. Given that, this test
// is not a valid test.
public void ShouldThrowANoSuchElementExceptionIfNothingIsSelected()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(elementWrapper.AllSelectedOptions.Count, Is.Zero);
}
[Test]
public void ShouldAllowOptionsToBeSelectedByVisibleText()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.SelectByText("select_2");
IWebElement firstSelected = elementWrapper.AllSelectedOptions[0];
Assert.That(firstSelected.Text, Is.EqualTo("select_2"));
}
[Test]
public void ShouldAllowOptionsToBeSelectedByPartialText()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.SelectByText("4", true);
IWebElement firstSelected = elementWrapper.AllSelectedOptions[0];
Assert.That(firstSelected.Text, Is.EqualTo("select_4"));
}
[Test]
public void ShouldThrowExceptionOnSelectByTextExactMatchIfOptionDoesNotExist()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByText("4"),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
[IgnoreBrowser(Browser.Firefox, "Not working in all bindings.")]
public void ShouldNotAllowInvisibleOptionsToBeSelectedByVisibleText()
{
IWebElement element = driver.FindElement(By.Name("invisi_select"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByText("Apples"),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldThrowExceptionOnSelectByVisibleTextIfOptionDoesNotExist()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByText("not there"),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldThrowExceptionOnSelectByVisibleTextIfOptionDisabled()
{
IWebElement element = driver.FindElement(By.Name("single_disabled"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByText("Disabled"),
Throws.TypeOf<InvalidOperationException>());
}
[Test]
public void ShouldAllowOptionsToBeSelectedByIndex()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.SelectByIndex(1);
IWebElement firstSelected = elementWrapper.AllSelectedOptions[0];
Assert.That(firstSelected.Text, Is.EqualTo("select_2"));
}
[Test]
public void ShouldThrowExceptionOnSelectByIndexIfOptionDoesNotExist()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByIndex(10),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldThrowExceptionOnSelectByIndexIfOptionDisabled()
{
IWebElement element = driver.FindElement(By.Name("single_disabled"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByIndex(1),
Throws.InvalidOperationException);
}
[Test]
public void ShouldAllowOptionsToBeSelectedByReturnedValue()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.SelectByValue("select_2");
IWebElement firstSelected = elementWrapper.AllSelectedOptions[0];
Assert.That(firstSelected.Text, Is.EqualTo("select_2"));
}
[Test]
public void ShouldThrowExceptionOnSelectByReturnedValueIfOptionDoesNotExist()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByValue("not there"),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldThrowExceptionOnSelectByReturnedValueIfOptionDisabled()
{
IWebElement element = driver.FindElement(By.Name("single_disabled"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.SelectByValue("disabled"),
Throws.InvalidOperationException);
}
[Test]
public void ShouldAllowUserToDeselectAllWhenSelectSupportsMultipleSelections()
{
IWebElement element = driver.FindElement(By.Name("multi"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.DeselectAll();
IList<IWebElement> returnedOptions = elementWrapper.AllSelectedOptions;
Assert.That(returnedOptions, Is.Empty);
}
[Test]
public void ShouldNotAllowUserToDeselectAllWhenSelectDoesNotSupportMultipleSelections()
{
IWebElement element = driver.FindElement(By.Name("selectomatic"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectAll(),
Throws.InvalidOperationException);
}
[Test]
public void ShouldAllowUserToDeselectOptionsByVisibleText()
{
IWebElement element = driver.FindElement(By.Name("multi"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.DeselectByText("Eggs");
IList<IWebElement> returnedOptions = elementWrapper.AllSelectedOptions;
Assert.That(returnedOptions.Count, Is.EqualTo(1));
}
[Test]
[IgnoreBrowser(Browser.Firefox, "Not working in all bindings.")]
public void ShouldNotAllowUserToDeselectOptionsByInvisibleText()
{
IWebElement element = driver.FindElement(By.Name("invisi_select"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectByText("Apples"),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldAllowOptionsToBeDeselectedByIndex()
{
IWebElement element = driver.FindElement(By.Name("multi"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.DeselectByIndex(0);
IList<IWebElement> returnedOptions = elementWrapper.AllSelectedOptions;
Assert.That(returnedOptions.Count, Is.EqualTo(1));
}
[Test]
public void ShouldAllowOptionsToBeDeselectedByReturnedValue()
{
IWebElement element = driver.FindElement(By.Name("multi"));
SelectElement elementWrapper = new SelectElement(element);
elementWrapper.DeselectByValue("eggs");
IList<IWebElement> returnedOptions = elementWrapper.AllSelectedOptions;
Assert.That(returnedOptions.Count, Is.EqualTo(1));
}
[Test]
public void ShouldThrowExceptionOnDeselectByReturnedValueIfOptionDoesNotExist()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectByValue("not there"),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldThrowExceptionOnDeselectByTextIfOptionDoesNotExist()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectByText("not there"),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldThrowExceptionOnDeselectByIndexIfOptionDoesNotExist()
{
IWebElement element = driver.FindElement(By.Name("select_empty_multiple"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectByIndex(10),
Throws.TypeOf<NoSuchElementException>());
}
[Test]
public void ShouldNotAllowUserToDeselectByTextWhenSelectDoesNotSupportMultipleSelections()
{
IWebElement element = driver.FindElement(By.Name("selectomatic"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectByText("Four"),
Throws.InvalidOperationException);
}
[Test]
public void ShouldNotAllowUserToDeselectByValueWhenSelectDoesNotSupportMultipleSelections()
{
IWebElement element = driver.FindElement(By.Name("selectomatic"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectByValue("two"),
Throws.InvalidOperationException);
}
[Test]
public void ShouldNotAllowUserToDeselectByIndexWhenSelectDoesNotSupportMultipleSelections()
{
IWebElement element = driver.FindElement(By.Name("selectomatic"));
SelectElement elementWrapper = new SelectElement(element);
Assert.That(
() => elementWrapper.DeselectByIndex(0),
Throws.InvalidOperationException);
}
}