Skip to content

Commit 08ba6fb

Browse files
committed
[rb] create working tests for locating elements
1 parent 00de9e7 commit 08ba6fb

File tree

1 file changed

+66
-21
lines changed

1 file changed

+66
-21
lines changed

Diff for: examples/ruby/spec/elements/locators_spec.rb

+66-21
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,107 @@
22

33
require 'spec_helper'
44

5-
RSpec.describe 'Element Locators', skip: 'These are reference following the documentation example' do
6-
it 'finds element by class name' do
7-
driver.find_element(class: 'information')
5+
RSpec.describe 'Element Locators' do
6+
before do
7+
start_session
8+
driver.navigate.to('https://www.selenium.dev/selenium/web/web-form.html')
89
end
910

10-
it 'finds element by css selector' do
11-
driver.find_element(css: '#fname')
11+
let(:driver) { @driver }
12+
let(:expected_elements) do
13+
{text_field: driver.find_element(id: 'my-text-id'),
14+
password: driver.find_element(name: 'my-password'),
15+
dropdown: driver.find_element(name: 'my-select'),
16+
radio: driver.find_element(id: 'my-radio-2'),
17+
link: driver.find_element(tag_name: 'a')}
18+
end
19+
20+
it 'finds element by class name' do
21+
element = driver.find_element(class: 'form-control')
22+
23+
expect(element).to eq(expected_elements[:text_field])
1224
end
1325

1426
it 'finds element by id' do
15-
driver.find_element(id: 'lname')
27+
element = driver.find_element(id: 'my-text-id')
28+
29+
expect(element).to eq(expected_elements[:text_field])
1630
end
1731

1832
it 'find element by name' do
19-
driver.find_element(name: 'newsletter')
20-
end
33+
element = driver.find_element(name: 'my-text')
2134

22-
it 'finds element by link text' do
23-
driver.find_element(link_text: 'Selenium Official Page')
35+
expect(element).to eq(expected_elements[:text_field])
2436
end
2537

26-
it 'finds element by partial link text' do
27-
driver.find_element(partial_link_text: 'Official Page')
38+
it 'finds element by tag name' do
39+
element = driver.find_element(tag_name: 'input')
40+
41+
expect(element).to eq(expected_elements[:text_field])
2842
end
2943

30-
it 'finds element by tag name' do
31-
driver.find_element(tag_name: 'a')
44+
it 'finds element by css selector' do
45+
element = driver.find_element(css: '.form-control[name$=text]')
46+
47+
expect(element).to eq(expected_elements[:text_field])
3248
end
3349

3450
it 'finds element by xpath' do
35-
driver.find_element(xpath: "//input[@value='f']")
51+
xpath = "//*[contains(@class, 'form-control') and substring(@name, string-length(@name) - 3) = 'text']"
52+
element = driver.find_element(xpath: xpath)
53+
54+
expect(element).to eq(expected_elements[:text_field])
55+
end
56+
57+
it 'finds element by link text' do
58+
element = driver.find_element(link_text: 'Return to index')
59+
60+
expect(element).to eq(expected_elements[:link])
61+
end
62+
63+
it 'finds element by partial link text' do
64+
element = driver.find_element(partial_link_text: 'Return')
65+
66+
expect(element).to eq(expected_elements[:link])
3667
end
3768

3869
context 'with relative locators' do
3970
it 'finds element above' do
40-
driver.find_element({relative: {tag_name: 'input', above: {id: 'password'}}})
71+
element = driver.find_element({relative: {tag_name: 'input', above: {name: 'my-password'}}})
72+
73+
expect(element).to eq(expected_elements[:text_field])
4174
end
4275

4376
it 'finds element below' do
44-
driver.find_element({relative: {tag_name: 'input', below: {id: 'email'}}})
77+
element = driver.find_element({relative: {tag_name: 'input', below: {id: 'my-text-id'}}})
78+
79+
expect(element).to eq(expected_elements[:password])
4580
end
4681

4782
it 'finds element to the left' do
48-
driver.find_element({relative: {tag_name: 'button', left: {id: 'submit'}}})
83+
element = driver.find_element({relative: {tag_name: 'input', left: {name: 'my-select'}}})
84+
85+
expect(element).to eq(expected_elements[:text_field])
4986
end
5087

5188
it 'finds element to the right' do
52-
driver.find_element({relative: {tag_name: 'button', right: {id: 'cancel'}}})
89+
element = driver.find_element({relative: {tag_name: 'select', right: {id: 'my-text-id'}}})
90+
91+
expect(element).to eq(expected_elements[:dropdown])
5392
end
5493

5594
it 'finds near element' do
56-
driver.find_element({relative: {tag_name: 'input', near: {id: 'lbl-email'}}})
95+
element = driver.find_element({relative: {tag_name: 'input', near: {name: 'my-password'}}})
96+
97+
puts "#{element.tag_name}: #{element.attribute('id')}"
98+
expect(element).to eq(expected_elements[:text_field])
5799
end
58100

59101
it 'chains relative locators' do
60-
driver.find_element({relative: {tag_name: 'button', below: {id: 'email'}, right: {id: 'cancel'}}})
102+
element = driver.find_element({relative: {tag_name: 'input', below: {name: 'my-select'},
103+
right: {tag_name: 'a'}}})
104+
105+
expect(element).to eq(expected_elements[:radio])
61106
end
62107
end
63108
end

0 commit comments

Comments
 (0)