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
28 changes: 14 additions & 14 deletions rb/spec/integration/selenium/webdriver/action_builder_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ module WebDriver
describe ActionBuilder, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do
after { driver.action.clear_all_actions }

describe '#send_keys' do
it 'sends keys to the active element', except: {browser: %i[safari safari_preview]} do
describe '#send_keys', except: {browser: %i[safari safari_preview]} do
it 'sends keys to the active element' do
driver.navigate.to url_for('bodyTypingTest.html')
keylogger = driver.find_element(id: 'body_result')

Expand All @@ -38,7 +38,7 @@ module WebDriver
expect(driver.find_element(id: 'result').text.strip).to be_empty
end

it 'sends keys to element', only: {browser: %i[chrome edge firefox]} do
it 'sends keys to element' do
driver.navigate.to url_for('formPage.html')

input = driver.find_element(css: '#working')
Expand Down Expand Up @@ -72,8 +72,8 @@ module WebDriver
end
end

describe 'multiple key presses' do
it 'sends keys with shift pressed', except: {browser: %i[safari safari_preview]} do
describe 'multiple key presses', except: {browser: %i[safari safari_preview]} do
it 'sends keys with shift pressed' do
driver.navigate.to url_for('javascriptPage.html')

event_input = driver.find_element(id: 'theworks')
Expand Down Expand Up @@ -107,7 +107,7 @@ module WebDriver
end
end

describe '#release_actions' do
describe '#release_actions', except: {browser: %i[safari safari_preview]} do
it 'releases pressed keys' do
driver.navigate.to url_for('javascriptPage.html')

Expand Down Expand Up @@ -139,7 +139,7 @@ module WebDriver
end
end

describe '#click' do
describe '#click', except: {browser: %i[safari safari_preview]} do
it 'clicks provided element' do
driver.navigate.to url_for('javascriptPage.html')
element = driver.find_element(id: 'clickField')
Expand All @@ -159,15 +159,15 @@ module WebDriver
# https://issues.chromium.org/issues/400087471
before { reset_driver! if GlobalTestEnv.rbe? && GlobalTestEnv.browser == :chrome }

it 'presses pointer twice', except: {browser: %i[safari safari_preview]} do
it 'presses pointer twice' do
driver.navigate.to url_for('javascriptPage.html')
element = driver.find_element(id: 'doubleClickField')

driver.action.double_click(element).perform
expect(element.property(:value)).to eq('DoubleClicked')
end

it 'executes with equivalent pointer methods', except: {browser: %i[safari safari_preview]} do
it 'executes with equivalent pointer methods' do
driver.navigate.to url_for('javascriptPage.html')
element = driver.find_element(id: 'doubleClickField')

Expand Down Expand Up @@ -197,7 +197,7 @@ module WebDriver
end
end

describe '#move_to' do
describe '#move_to', except: {browser: %i[safari safari_preview]} do
it 'moves to element' do
driver.navigate.to url_for('javascriptPage.html')
element = driver.find_element(id: 'clickField')
Expand All @@ -220,7 +220,7 @@ module WebDriver
end
end

describe '#drag_and_drop' do
describe '#drag_and_drop', except: {browser: %i[safari safari_preview]} do
it 'moves one element to another' do
driver.navigate.to url_for('droppableItems.html')

Expand All @@ -237,7 +237,7 @@ module WebDriver
end
end

describe '#drag_and_drop_by' do
describe '#drag_and_drop_by', except: {browser: %i[safari safari_preview]} do
it 'moves one element a provided distance' do
driver.navigate.to url_for('droppableItems.html')

Expand All @@ -253,7 +253,7 @@ module WebDriver
end
end

describe '#move_to_location' do
describe '#move_to_location', except: {browser: %i[safari safari_preview]} do
it 'moves pointer to specified coordinates' do
driver.navigate.to url_for('javascriptPage.html')
element = driver.find_element(id: 'clickField')
Expand Down Expand Up @@ -390,7 +390,7 @@ module WebDriver
end

it 'raises MoveTargetOutOfBoundsError when origin offset is out of viewport',
only: {browser: %i[chrome edge firefox]} do
except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('scrolling_tests/frame_with_nested_scrolling_frame.html')
scroll_origin = WheelActions::ScrollOrigin.viewport(-10, -10)

Expand Down
2 changes: 1 addition & 1 deletion rb/spec/integration/selenium/webdriver/driver_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ module WebDriver
expect(driver.page_source).to match(%r{<title>XHTML Test Page</title>}i)
end

it 'refreshes the page' do
it 'refreshes the page', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('javascriptPage.html')
short_wait { driver.find_element(id: 'updatediv') }.click
expect(driver.find_element(id: 'dynamo').text).to eq('Fish and chips!')
Expand Down
15 changes: 6 additions & 9 deletions rb/spec/integration/selenium/webdriver/element_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ module WebDriver
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"
Expand All @@ -50,8 +49,6 @@ module WebDriver

expect { button.click }.to raise_exception(Error::StaleElementReferenceError,
/errors#staleelementreferenceexception/)

reset_driver!(time: 1) if %i[safari safari_preview].include? GlobalTestEnv.browser
end

describe '#submit' do
Expand Down Expand Up @@ -203,12 +200,12 @@ module WebDriver
expect(element.dom_attribute(prop_or_attr)).to eq 'true'
end

it '#property updates to false after click' do
it '#property updates to false after click', except: {browser: %i[safari safari_preview]} do
element.click
expect(element.property(prop_or_attr)).to be false
end

it '#attribute updates to nil after click' do
it '#attribute updates to nil after click', except: {browser: %i[safari safari_preview]} do
element.click
expect(element.attribute(prop_or_attr)).to be_nil
end
Expand All @@ -235,12 +232,12 @@ module WebDriver
expect(element.dom_attribute(prop_or_attr)).to be_nil
end

it '#property updates to true after click' do
it '#property updates to true after click', except: {browser: %i[safari safari_preview]} do
element.click
expect(element.property(prop_or_attr)).to be true
end

it '#attribute updates to String after click' do
it '#attribute updates to String after click', except: {browser: %i[safari safari_preview]} do
element.click
expect(element.attribute(prop_or_attr)).to eq 'true'
end
Expand Down Expand Up @@ -457,7 +454,7 @@ module WebDriver
expect { element.clear }.not_to raise_error
end

it 'gets and set selected' do
it 'gets and set selected', except: {browser: %i[safari safari_preview]} do
open_file 'formPage.html'

cheese = wait_for_element(id: 'cheese')
Expand Down Expand Up @@ -529,7 +526,7 @@ module WebDriver
end

# IE - https://github.com/SeleniumHQ/selenium/pull/4043
it 'drags and drop', except: {browser: :ie} do
it 'drags and drop', except: [{browser: :ie}, {browser: %i[safari safari_preview]}] do
open_file 'dragAndDropTest.html'

img1 = wait_for_element(id: 'test1')
Expand Down
3 changes: 2 additions & 1 deletion rb/spec/integration/selenium/webdriver/manager_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ module WebDriver
before { driver.navigate.to url_for('xhtmlTest.html') }

after do
if GlobalTestEnv.rbe? && GlobalTestEnv.browser == :chrome
if (GlobalTestEnv.rbe? && GlobalTestEnv.browser == :chrome) ||
%i[safari safari_preview].include?(GlobalTestEnv.browser)
reset_driver!
else
driver.manage.delete_all_cookies
Expand Down
4 changes: 2 additions & 2 deletions rb/spec/integration/selenium/webdriver/navigation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
module Selenium
module WebDriver
describe Navigation do
it 'navigates back and forward' do
it 'navigates back and forward', except: {browser: %i[safari safari_preview]} do
form_title = 'We Leave From Here'
result_title = 'We Arrive Here'
form_url = url_for 'formPage.html'
Expand All @@ -46,7 +46,7 @@ module WebDriver
expect(driver.title).to eq(result_title)
end

it 'refreshes the page' do
it 'refreshes the page', except: {browser: %i[safari safari_preview]} do
changed_title = 'Changed'

driver.navigate.to url_for('javascriptPage.html')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,11 @@ def driver_instance(...)
@driver_instance || create_driver!(...)
end

def reset_driver!(time: 0, **opts, &block)
def reset_driver!(**opts, &block)
# do not reset if the test was marked skipped
return if opts.delete(:example)&.metadata&.fetch(:skip, nil)

quit_driver
sleep time
driver_instance(**opts, &block)
end

Expand Down Expand Up @@ -203,10 +202,12 @@ def root
def create_driver!(listener: nil, http_client: nil, **, &block)
check_for_previous_error
http_client ||= Remote::Http::Default.new(read_timeout: 30)
@safari_pairing_attempts ||= 0

method = :"#{driver}_driver"
opts = {options: build_options(**), listener: listener, http_client: http_client}
instance = private_methods.include?(method) ? send(method, **opts) : WebDriver::Driver.for(driver, **opts)
@safari_pairing_attempts = 0
@create_driver_error_count -= 1 unless @create_driver_error_count.zero?
if block
begin
Expand All @@ -218,6 +219,7 @@ def create_driver!(listener: nil, http_client: nil, **, &block)
@driver_instance = instance
end
rescue StandardError => e
retry if safari_pairing_retry?(e)
@create_driver_error = e
@create_driver_error_count += 1
raise e
Expand Down Expand Up @@ -247,6 +249,21 @@ def current_env

MAX_ERRORS = 4

# Safari Driver is slow to release previous sessions especially on Grid.
SAFARI_PAIRING_RETRIES = 5
SAFARI_PAIRING_INTERVAL = 1

def safari_pairing_retry?(error)
msg = 'instance is already paired'
return false unless browser.to_s.include?('safari') && error.message.to_s.include?(msg)
return false if @safari_pairing_attempts >= SAFARI_PAIRING_RETRIES

@safari_pairing_attempts += 1
WebDriver.logger.warn("Safari pairing busy; retry #{@safari_pairing_attempts}/#{SAFARI_PAIRING_RETRIES}")
sleep SAFARI_PAIRING_INTERVAL
true
end

class DriverInstantiationError < StandardError
end

Expand Down
28 changes: 15 additions & 13 deletions rb/spec/integration/selenium/webdriver/target_locator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ module WebDriver
end
end

it 'switches to a window and back when given a block' do
it 'switches to a window and back when given a block', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('xhtmlTest.html')

driver.find_element(link: 'Open new window').click
Expand All @@ -125,7 +125,7 @@ module WebDriver
wait.until { driver.title == 'XHTML Test Page' }
end

it 'handles exceptions inside the block' do
it 'handles exceptions inside the block', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('xhtmlTest.html')

driver.find_element(link: 'Open new window').click
Expand All @@ -139,7 +139,7 @@ module WebDriver
expect(driver.title).to eq('XHTML Test Page')
end

it 'switches to a window without a block' do
it 'switches to a window without a block', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('xhtmlTest.html')

driver.find_element(link: 'Open new window').click
Expand All @@ -151,7 +151,7 @@ module WebDriver
expect(driver.title).to eq('We Arrive Here')
end

it 'uses the original window if the block closes the popup' do
it 'uses the original window if the block closes the popup', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('xhtmlTest.html')

driver.find_element(link: 'Open new window').click
Expand All @@ -168,8 +168,8 @@ module WebDriver
end
end

context 'with more than two windows', except: [{browser: %i[safari safari_preview]},
{driver: :remote, browser: :ie}] do
context 'with more than two windows', except: [{driver: :remote, browser: :ie},
{browser: %i[safari safari_preview]}] do
it 'closes current window via block' do
driver.navigate.to url_for('xhtmlTest.html')
wait_for_element(link: 'Create a new anonymous window')
Expand Down Expand Up @@ -237,7 +237,8 @@ module WebDriver
end
end

it 'switches to a window and execute a block when current window is closed' do
it 'switches to a window and execute a block when current window is closed',
except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('xhtmlTest.html')
driver.find_element(link: 'Open new window').click
wait.until { driver.window_handles.size == 2 }
Expand Down Expand Up @@ -265,7 +266,7 @@ module WebDriver

# Edge BUG - https://connect.microsoft.com/IE/feedback/details/1850030
describe 'alerts' do
it 'allows the user to accept an alert' do
it 'allows the user to accept an alert', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('alerts.html')
driver.find_element(id: 'alert').click

Expand All @@ -276,7 +277,7 @@ module WebDriver
expect(driver.title).to eq('Testing Alerts')
end

it 'allows the user to dismiss an alert' do
it 'allows the user to dismiss an alert', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('alerts.html')
driver.find_element(id: 'alert').click

Expand All @@ -287,7 +288,7 @@ module WebDriver
expect(driver.title).to eq('Testing Alerts')
end

it 'allows the user to set the value of a prompt' do
it 'allows the user to set the value of a prompt', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('alerts.html')
driver.find_element(id: 'prompt').click

Expand All @@ -299,7 +300,7 @@ module WebDriver
expect(text).to eq('cheese')
end

it 'allows the user to get the text of an alert' do
it 'allows the user to get the text of an alert', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('alerts.html')
driver.find_element(id: 'alert').click

Expand All @@ -311,7 +312,7 @@ module WebDriver
wait_for_no_alert
end

it 'raises when calling #text on a closed alert' do
it 'raises when calling #text on a closed alert', except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('alerts.html')
wait_for_element(id: 'alert')

Expand All @@ -329,7 +330,8 @@ module WebDriver
end

describe 'unhandled alert error' do
it 'raises an UnexpectedAlertOpenError if an alert has not been dealt with' do
it 'raises an UnexpectedAlertOpenError if an alert has not been dealt with',
except: {browser: %i[safari safari_preview]} do
driver.navigate.to url_for('alerts.html')
driver.find_element(id: 'alert').click
wait_for_alert
Expand Down
Loading
Loading