Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion common/src/web/blank.html
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
<html><head><title>blank</title></head><body></body></html>
<html><head><title>blank</title></head><body>
<script>
localStorage.clear();
sessionStorage.clear();
</script>
</body></html>
66 changes: 33 additions & 33 deletions rb/spec/integration/selenium/webdriver/element_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,28 @@ module Selenium
module WebDriver
describe Element, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do
it 'clicks' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
element = wait_for_element(id: 'imageButton')
expect { element.click }.not_to raise_error
reset_driver!(time: 1) if %i[safari safari_preview].include? GlobalTestEnv.browser
end

# Safari returns "click intercepted" error instead of "element click intercepted"
it 'raises if different element receives click', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('click_tests/overlapping_elements.html')
open_file 'click_tests/overlapping_elements.html'
element = wait_for_element(id: 'contents', timeout: 10)
expect { element.click }.to raise_error(Error::ElementClickInterceptedError)
end

# Safari returns "click intercepted" error instead of "element click intercepted"
it 'raises if element is partially covered', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('click_tests/overlapping_elements.html')
open_file 'click_tests/overlapping_elements.html'
element = wait_for_element(id: 'other_contents')
expect { element.click }.to raise_error(Error::ElementClickInterceptedError)
end

it 'raises if element stale' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
button = wait_for_element(id: 'imageButton')
driver.navigate.refresh

Expand All @@ -56,67 +56,67 @@ module WebDriver

describe '#submit' do
it 'valid submit button' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
wait_for_element(id: 'submitButton').submit

wait_for_url('resultPage.html')
expect(driver.title).to eq('We Arrive Here')
end

it 'any input element in form' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
wait_for_element(id: 'checky').submit

wait_for_url('resultPage.html')
expect(driver.title).to eq('We Arrive Here')
end

it 'any element in form' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
wait_for_element(css: 'form > p').submit

wait_for_url('resultPage.html')
expect(driver.title).to eq('We Arrive Here')
end

it 'button with id submit' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
wait_for_element(id: 'submit').submit

wait_for_url('resultPage.html')
expect(driver.title).to eq('We Arrive Here')
end

it 'button with name submit' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
wait_for_element(name: 'submit').submit

wait_for_url('resultPage.html')
expect(driver.title).to eq('We Arrive Here')
end

it 'errors with button outside form' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
element = wait_for_element(name: 'SearchableText')
expect { element.submit }.to raise_error(Error::UnsupportedOperationError)
end
end

it 'sends empty keys' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
element = wait_for_element(id: 'working')
element.send_keys
expect(element.text).to be_empty
end

it 'sends string keys' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
wait_for_element(id: 'working')
expect { driver.find_element(id: 'working').send_keys('foo', 'bar') }.not_to raise_error
end

it 'sends key presses' do
driver.navigate.to url_for('javascriptPage.html')
open_file 'javascriptPage.html'
key_reporter = wait_for_element(id: 'keyReporter')

key_reporter.send_keys('Tet', :arrow_left, 's')
Expand All @@ -125,15 +125,15 @@ module WebDriver

# https://github.com/mozilla/geckodriver/issues/245
it 'sends key presses chords', except: {browser: %i[firefox safari safari_preview]} do
driver.navigate.to url_for('javascriptPage.html')
open_file 'javascriptPage.html'
key_reporter = wait_for_element(id: 'keyReporter')

key_reporter.send_keys([:shift, 'h'], 'ello')
expect(key_reporter.attribute('value')).to eq('Hello')
end

it 'handles file uploads' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'

element = wait_for_element(id: 'upload')
expect(element.attribute('value')).to be_empty
Expand All @@ -146,7 +146,7 @@ module WebDriver
end

describe 'properties and attributes' do
before { driver.navigate.to url_for('formPage.html') }
before { open_file 'formPage.html' }

context 'when string type' do
let(:element) { wait_for_element(id: 'checky') }
Expand Down Expand Up @@ -308,7 +308,7 @@ module WebDriver
end

describe 'style' do
before { driver.navigate.to url_for('clickEventPage.html') }
before { open_file 'clickEventPage.html' }

let(:element) { wait_for_element(id: 'result') }
let(:prop_or_attr) { 'style' }
Expand Down Expand Up @@ -452,13 +452,13 @@ module WebDriver
end

it 'clears' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
element = wait_for_element(id: 'withText')
expect { element.clear }.not_to raise_error
end

it 'gets and set selected' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'

cheese = wait_for_element(id: 'cheese')
peas = wait_for_element(id: 'peas')
Expand All @@ -475,50 +475,50 @@ module WebDriver
end

it 'gets enabled' do
driver.navigate.to url_for('formPage.html')
open_file 'formPage.html'
element = wait_for_element(id: 'notWorking')
expect(element).not_to be_enabled
end

it 'gets text' do
driver.navigate.to url_for('xhtmlTest.html')
open_file 'xhtmlTest.html'
element = wait_for_element(class: 'header')
expect(element.text).to eq('XHTML Might Be The Future')
end

it 'gets displayed' do
driver.navigate.to url_for('xhtmlTest.html')
open_file 'xhtmlTest.html'
element = wait_for_element(class: 'header')
expect(element).to be_displayed
end

describe 'size and location' do
it 'gets current location' do
driver.navigate.to url_for('xhtmlTest.html')
open_file 'xhtmlTest.html'
loc = wait_for_element(class: 'header').location

expect(loc.x).to be >= 1
expect(loc.y).to be >= 1
end

it 'gets location once scrolled into view' do
driver.navigate.to url_for('javascriptPage.html')
open_file 'javascriptPage.html'
loc = wait_for_element(id: 'keyUp').location_once_scrolled_into_view

expect(loc.x).to be >= 1
expect(loc.y).to be >= 0 # can be 0 if scrolled to the top
end

it 'gets size' do
driver.navigate.to url_for('xhtmlTest.html')
open_file 'xhtmlTest.html'
size = wait_for_element(class: 'header').size

expect(size.width).to be_positive
expect(size.height).to be_positive
end

it 'gets rect' do
driver.navigate.to url_for('xhtmlTest.html')
open_file 'xhtmlTest.html'
rect = wait_for_element(class: 'header').rect

expect(rect.x).to be_positive
Expand All @@ -530,7 +530,7 @@ module WebDriver

# IE - https://github.com/SeleniumHQ/selenium/pull/4043
it 'drags and drop', except: {browser: :ie} do
driver.navigate.to url_for('dragAndDropTest.html')
open_file 'dragAndDropTest.html'

img1 = wait_for_element(id: 'test1')
img2 = wait_for_element(id: 'test2')
Expand All @@ -543,7 +543,7 @@ module WebDriver
end

it 'gets css property' do
driver.navigate.to url_for('javascriptPage.html')
open_file 'javascriptPage.html'
element = wait_for_element(id: 'green-parent')

style1 = element.css_value('background-color')
Expand All @@ -554,7 +554,7 @@ module WebDriver
end

it 'knows when two elements are equal' do
driver.navigate.to url_for('simpleTest.html')
open_file 'simpleTest.html'

body = wait_for_element(tag_name: 'body')
xbody = wait_for_element(xpath: '//body')
Expand All @@ -567,7 +567,7 @@ module WebDriver
end

it 'knows when element arrays are equal' do
driver.navigate.to url_for('simpleTest.html')
open_file 'simpleTest.html'

tags = driver.find_elements(tag_name: 'div')
jstags = driver.execute_script('return document.getElementsByTagName("div")')
Expand All @@ -576,7 +576,7 @@ module WebDriver
end

it 'knows when two elements are not equal' do
driver.navigate.to url_for('simpleTest.html')
open_file 'simpleTest.html'

elements = driver.find_elements(tag_name: 'p')
p1 = elements.fetch(0)
Expand All @@ -587,7 +587,7 @@ module WebDriver
end

it 'returns the same #hash for equal elements when found by Driver#find_element' do
driver.navigate.to url_for('simpleTest.html')
open_file 'simpleTest.html'

body = driver.find_element(tag_name: 'body')
xbody = driver.find_element(xpath: '//body')
Expand All @@ -596,7 +596,7 @@ module WebDriver
end

it 'returns the same #hash for equal elements when found by Driver#find_elements' do
driver.navigate.to url_for('simpleTest.html')
open_file 'simpleTest.html'

body = driver.find_elements(tag_name: 'body').fetch(0)
xbody = driver.find_elements(xpath: '//body').fetch(0)
Expand Down
15 changes: 12 additions & 3 deletions rb/spec/integration/selenium/webdriver/spec_support/helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,10 @@ def wait_for_element(locator, timeout = 25)
wait.until { driver.find_element(locator) }
end

def wait_for_url(new_url)
wait = Wait.new(timeout: 5)
def wait_for_url(new_url, timeout = 15)
wait = Wait.new(timeout: timeout, message_provider: lambda {
"could not wait for URL #{new_url} in #{timeout} seconds;\nactual page url: #{driver.current_url};\n"
})
wait.until do
driver.current_url.include?(new_url)
end
Expand All @@ -106,10 +108,17 @@ def wait_for_devtools_target(target_type:)
end

def wait_for_title(title:)
wait = Wait.new(timeout: 5)
wait = Wait.new(timeout: 15)
wait.until { driver.title == title }
end

def open_file(file_name)
driver.navigate.to 'about:blank'
driver.navigate.to url_for('blank.html')
driver.navigate.to url_for(file_name)
wait_for_url(file_name)
end

def wait(timeout = 10)
Wait.new(timeout: timeout)
end
Expand Down