Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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')
Comment thread
asolntsev marked this conversation as resolved.
driver.navigate.to url_for(file_name)
wait_for_url(file_name)
end

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