Skip to content

Commit 1c78ecf

Browse files
committed
implement example code for select lists
1 parent d944c93 commit 1c78ecf

File tree

6 files changed

+290
-21
lines changed

6 files changed

+290
-21
lines changed

examples/dotnet/SeleniumDocs/SeleniumDocs.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.22.0" />
1111
<PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
1212
<PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
13+
<PackageReference Include="Selenium.Support" Version="4.4.0" />
1314
<PackageReference Include="Selenium.WebDriver" Version="4.4.0" />
1415
<PackageReference Include="WebDriverManager" Version="2.14.1" />
1516
</ItemGroup>
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
using System.Collections.Generic;
2+
using System.Collections.ObjectModel;
3+
using System.Linq;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using OpenQA.Selenium;
6+
using OpenQA.Selenium.Remote;
7+
using OpenQA.Selenium.Support.UI;
8+
9+
namespace SeleniumDocs.Support
10+
{
11+
[TestClass]
12+
public class SelectListTest : BaseTest
13+
{
14+
[TestInitialize]
15+
public void Navigate()
16+
{
17+
driver.Url = "https://www.selenium.dev/selenium/web/formPage.html";
18+
}
19+
20+
[TestMethod]
21+
public void SelectOption()
22+
{
23+
var selectElement = driver.FindElement(By.Name("selectomatic"));
24+
var select = new SelectElement(selectElement);
25+
26+
var twoElement = driver.FindElement(By.CssSelector("option[value=two]"));
27+
var fourElement = driver.FindElement(By.CssSelector("option[value=four]"));
28+
var countElement = driver.FindElement(By.CssSelector("option[value='still learning how to count, apparently']"));
29+
30+
select.SelectByText("Four");
31+
Assert.IsTrue(fourElement.Selected);
32+
33+
select.SelectByValue("two");
34+
Assert.IsTrue(twoElement.Selected);
35+
36+
select.SelectByIndex(3);
37+
Assert.IsTrue(countElement.Selected);
38+
39+
}
40+
41+
[TestMethod]
42+
public void SelectMultipleOption()
43+
{
44+
var selectElement = driver.FindElement(By.Name("multi"));
45+
var select = new SelectElement(selectElement);
46+
47+
var hamElement = driver.FindElement(By.CssSelector("option[value=ham]"));
48+
var gravyElement = driver.FindElement(By.CssSelector("option[value='onion gravy']"));
49+
var eggElement = driver.FindElement(By.CssSelector("option[value=eggs]"));
50+
var sausageElement = driver.FindElement(By.CssSelector("option[value='sausages']"));
51+
52+
IList<IWebElement> optionList = select.Options;
53+
IWebElement[] optionElements = selectElement.FindElements(By.TagName("option")).ToArray();
54+
CollectionAssert.AreEqual(optionElements, optionList.ToArray());
55+
56+
IList<IWebElement> selectedOptionList = select.AllSelectedOptions;
57+
IWebElement[] expectedSelection = { eggElement, sausageElement };
58+
CollectionAssert.AreEqual(expectedSelection, selectedOptionList.ToArray());
59+
60+
select.SelectByValue("ham");
61+
select.SelectByValue("onion gravy");
62+
Assert.IsTrue(hamElement.Selected);
63+
Assert.IsTrue(gravyElement.Selected);
64+
65+
select.DeselectByValue("eggs");
66+
select.DeselectByValue("sausages");
67+
Assert.IsFalse(eggElement.Selected);
68+
Assert.IsFalse(sausageElement.Selected);
69+
}
70+
71+
[TestMethod]
72+
public void DisabledOption()
73+
{
74+
var selectElement = driver.FindElement(By.Name("single_disabled"));
75+
var select = new SelectElement(selectElement);
76+
77+
Assert.ThrowsException<WebDriverArgumentException>(() => select.SelectByValue("disabled"));
78+
}
79+
}
80+
}

examples/java/src/test/java/dev/selenium/select_element/SelectElementTest.java

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package dev.selenium.support;
2+
3+
import dev.selenium.BaseTest;
4+
import org.junit.jupiter.api.Assertions;
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Test;
7+
import org.openqa.selenium.By;
8+
import org.openqa.selenium.WebElement;
9+
import org.openqa.selenium.support.ui.Select;
10+
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
14+
public class SelectListTest extends BaseTest {
15+
16+
@BeforeEach
17+
public void navigate() {
18+
driver.get("https://www.selenium.dev/selenium/web/formPage.html");
19+
}
20+
21+
@Test
22+
public void selectOption() {
23+
WebElement selectElement = driver.findElement(By.name("selectomatic"));
24+
Select select = new Select(selectElement);
25+
26+
WebElement twoElement = driver.findElement(By.cssSelector("option[value=two]"));
27+
WebElement fourElement = driver.findElement(By.cssSelector("option[value=four]"));
28+
WebElement countElement = driver.findElement(By.cssSelector("option[value='still learning how to count, apparently']"));
29+
30+
select.selectByVisibleText("Four");
31+
Assertions.assertTrue(fourElement.isSelected());
32+
33+
select.selectByValue("two");
34+
Assertions.assertTrue(twoElement.isSelected());
35+
36+
select.selectByIndex(3);
37+
Assertions.assertTrue(countElement.isSelected());
38+
}
39+
40+
@Test
41+
public void selectMultipleOption() {
42+
WebElement selectElement = driver.findElement(By.name("multi"));
43+
Select select = new Select(selectElement);
44+
45+
WebElement hamElement = driver.findElement(By.cssSelector("option[value=ham]"));
46+
WebElement gravyElement = driver.findElement(By.cssSelector("option[value='onion gravy']"));
47+
WebElement eggElement = driver.findElement(By.cssSelector("option[value=eggs]"));
48+
WebElement sausageElement = driver.findElement(By.cssSelector("option[value='sausages']"));
49+
50+
List<WebElement> optionElements = selectElement.findElements(By.tagName("option"));
51+
List<WebElement> optionList = select.getOptions();
52+
Assertions.assertEquals(optionElements, optionList);
53+
54+
List<WebElement> selectedOptionList = select.getAllSelectedOptions();
55+
List<WebElement> expectedSelection = new ArrayList<WebElement>() {{
56+
add(eggElement);
57+
add(sausageElement);
58+
}};
59+
Assertions.assertEquals(expectedSelection, selectedOptionList);
60+
61+
select.selectByValue("ham");
62+
select.selectByValue("onion gravy");
63+
Assertions.assertTrue(hamElement.isSelected());
64+
Assertions.assertTrue(gravyElement.isSelected());
65+
66+
select.deselectByValue("eggs");
67+
select.deselectByValue("sausages");
68+
Assertions.assertFalse(eggElement.isSelected());
69+
Assertions.assertFalse(sausageElement.isSelected());
70+
}
71+
72+
@Test
73+
public void disabledOption() {
74+
WebElement selectElement = driver.findElement(By.name("single_disabled"));
75+
Select select = new Select(selectElement);
76+
77+
Assertions.assertThrows(UnsupportedOperationException.class, () -> {
78+
select.selectByValue("disabled");
79+
});
80+
}
81+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import pytest
2+
from selenium.webdriver.common.by import By
3+
from selenium.webdriver.support.select import Select
4+
5+
6+
def test_select_options(driver):
7+
driver.get('https://selenium.dev/selenium/web/formPage.html')
8+
9+
select_element = driver.find_element(By.NAME, 'selectomatic')
10+
select = Select(select_element)
11+
12+
two_element = driver.find_element(By.CSS_SELECTOR, 'option[value=two]')
13+
four_element = driver.find_element(By.CSS_SELECTOR, 'option[value=four]')
14+
count_element = driver.find_element(By.CSS_SELECTOR, "option[value='still learning how to count, apparently']")
15+
16+
select.select_by_visible_text('Four')
17+
assert four_element.is_selected()
18+
19+
select.select_by_value('two')
20+
assert two_element.is_selected()
21+
22+
select.select_by_index(3)
23+
assert count_element.is_selected()
24+
25+
26+
def test_select_multiple_options(driver):
27+
driver.get('https://selenium.dev/selenium/web/formPage.html')
28+
select_element = driver.find_element(By.NAME, 'multi')
29+
select = Select(select_element)
30+
31+
ham_element = driver.find_element(By.CSS_SELECTOR, 'option[value=ham]')
32+
gravy_element = driver.find_element(By.CSS_SELECTOR, "option[value='onion gravy']")
33+
egg_element = driver.find_element(By.CSS_SELECTOR, 'option[value=eggs]')
34+
sausage_element = driver.find_element(By.CSS_SELECTOR, "option[value='sausages']")
35+
36+
option_elements = select_element.find_elements(By.TAG_NAME, 'option')
37+
option_list = select.options
38+
assert option_elements == option_list
39+
40+
selected_option_list = select.all_selected_options
41+
expected_selection = [egg_element, sausage_element]
42+
assert selected_option_list == expected_selection
43+
44+
select.select_by_value('ham')
45+
select.select_by_value('onion gravy')
46+
assert ham_element.is_selected()
47+
assert gravy_element.is_selected()
48+
49+
select.deselect_by_value('eggs')
50+
select.deselect_by_value('sausages')
51+
assert not egg_element.is_selected()
52+
assert not sausage_element.is_selected()
53+
54+
def test_disabled_options(driver):
55+
driver.get('https://selenium.dev/selenium/web/formPage.html')
56+
57+
select_element = driver.find_element(By.NAME, 'single_disabled')
58+
select = Select(select_element)
59+
60+
with pytest.raises(NotImplementedError):
61+
select.select_by_value('disabled')
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
RSpec.describe 'Chrome' do
6+
7+
let(:driver) { start_session }
8+
9+
before do
10+
driver.get('https://www.selenium.dev/selenium/web/formPage.html')
11+
end
12+
13+
it 'select options' do
14+
select_element = driver.find_element(name: 'selectomatic')
15+
select = Selenium::WebDriver::Support::Select.new(select_element)
16+
17+
two_element = driver.find_element(css: 'option[value=two]')
18+
four_element = driver.find_element(css: 'option[value=four]')
19+
count_element = driver.find_element(css: "option[value='still learning how to count, apparently']")
20+
21+
select.select_by(:text,'Four')
22+
expect(four_element).to be_selected
23+
24+
select.select_by(:value,'two')
25+
expect(two_element).to be_selected
26+
27+
select.select_by(:index,3)
28+
expect(count_element).to be_selected
29+
end
30+
31+
it 'select multiple options' do
32+
select_element = driver.find_element(name: 'multi')
33+
select = Selenium::WebDriver::Support::Select.new(select_element)
34+
35+
ham_element = driver.find_element(css: 'option[value=ham]')
36+
gravy_element = driver.find_element(css: "option[value='onion gravy']")
37+
egg_element = driver.find_element(css: 'option[value=eggs]')
38+
sausage_element = driver.find_element(css: "option[value='sausages']")
39+
40+
option_elements = select_element.find_elements(tag_name: 'option')
41+
option_list = select.options
42+
expect(option_elements).to eq option_list
43+
44+
selected_option_list = select.selected_options
45+
expected_selection = [egg_element, sausage_element]
46+
expect(selected_option_list).to eq expected_selection
47+
48+
select.select_by(:value, 'ham')
49+
select.select_by(:value, 'onion gravy')
50+
expect(ham_element).to be_selected
51+
expect(gravy_element).to be_selected
52+
53+
select.deselect_by(:value, 'eggs')
54+
select.deselect_by(:value, 'sausages')
55+
expect(egg_element).not_to be_selected
56+
expect(sausage_element).not_to be_selected
57+
end
58+
59+
it 'disabled options' do
60+
select_element = driver.find_element(name: 'single_disabled')
61+
select = Selenium::WebDriver::Support::Select.new(select_element)
62+
63+
expect {
64+
select.select_by(:value, 'disabled')
65+
}.to raise_exception(Selenium::WebDriver::Error::UnsupportedOperationError)
66+
end
67+
end

0 commit comments

Comments
 (0)