spec: update version of chrome to 78

closes: CCI-162

flag = none

Change-Id: Id03868b8095a948929fd39ae74d0c70a5eef0df9
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/221262
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Rex Fleischer <rfleischer@instructure.com>
Reviewed-by: Derek Bender <djbender@instructure.com>
QA-Review: James Butters <jbutters@instructure.com>
Product-Review: James Butters <jbutters@instructure.com>
This commit is contained in:
James Butters 2019-12-18 09:46:14 -07:00
parent 0987aa6e1a
commit fcd5a4fee8
36 changed files with 90 additions and 80 deletions

View File

@ -46,9 +46,9 @@ group :test do
gem 'sauce_whisk', '0.1.0'
# Keep this gem synced with docker-compose/seleniumff/Dockerfile
gem 'selenium-webdriver', '3.142.3'
gem 'selenium-webdriver', '3.141.5926'
gem 'childprocess', '1.0.1', require: false
gem 'chromedriver-helper', '2.1.0', require: false
gem 'webdrivers', '~> 4.0', require: false
gem 'selinimum', '0.0.1', require: false, path: 'gems/selinimum'
gem 'test-queue', github: 'instructure/test-queue', ref: 'd35166408df3a5396cd809e85dcba175136a69ba', require: false
gem 'testrailtagging', '0.3.8.7', require: false

View File

@ -5,6 +5,6 @@ set -x -o errexit -o errtrace -o nounset -o pipefail
# pull docker images (or build them if missing)
REGISTRY_BASE=starlord.inscloudgate.net/jenkins
docker pull $REGISTRY_BASE/selenium-chrome:3.141.59-selenium || \
(docker build -t $REGISTRY_BASE/selenium-chrome:3.141.59-selenium docker-compose/selenium-chrome && \
docker push $REGISTRY_BASE/selenium-chrome:3.141.59-selenium)
docker pull $REGISTRY_BASE/selenium-chrome:3.141.59-xenon || \
(docker build -t $REGISTRY_BASE/selenium-chrome:3.141.59-xenon docker-compose/selenium-chrome && \
docker push $REGISTRY_BASE/selenium-chrome:3.141.59-xenon)

View File

@ -14,7 +14,7 @@ services:
SASS_STYLE: 'compressed'
selenium-chrome:
image: starlord.inscloudgate.net/jenkins/selenium-chrome:3.141.59-selenium
image: starlord.inscloudgate.net/jenkins/selenium-chrome:3.141.59-xenon
environment:
SCREEN_WIDTH: 1680
SCREEN_HEIGHT: 1050

View File

@ -1,5 +1,5 @@
# Keep this image version tag synced with Gemfile.d/test.rb
FROM selenium/standalone-chrome-debug:3.141.59-selenium
FROM selenium/standalone-chrome-debug:3.141.59-xenon
COPY entry_point.sh /opt/bin/custom_entry_point.sh
USER root

View File

@ -46,7 +46,7 @@ describe "settings tabs" do
expect(notification.start_at.day).to eq 1
expect(notification.end_at.day).to eq 15
expect(f("#tab-announcements .announcement-details")).to include_text(displayed_username)
dismiss_flash_messages
dismiss_flash_messages_if_present
# close the "user account" Tray that opened so we could read the displayed username
f('body').click

View File

@ -71,6 +71,7 @@ describe "discussion assignments" do
f('.announcement_cog').click
fln('Delete').click
driver.switch_to.alert.accept
wait_for_ajaximations
assert_flash_notice_message("#{discussion_title} deleted successfully")
end
end

View File

@ -194,7 +194,7 @@ describe "assignment groups" do
get "/courses/#{@course.id}/assignments"
expect(f('.assignment .assignment-date-due')).to include_text "Multiple Dates"
driver.mouse.move_to f(".assignment .assignment-date-due a")
driver.action.move_to(f(".assignment .assignment-date-due a")).perform
wait_for_ajaximations
tooltip = fj('.vdd_tooltip_content:visible')

View File

@ -59,6 +59,7 @@ describe 'submissions' do
end
it 'Submitting Group Assignments - No File Warning', priority: "1", test_id: 238165 do
skip('investigate in CCI-182')
create_assignment_for_group('online_upload')
get "/courses/#{@course.id}/assignments/#{@assignment.id}"
f('.submit_assignment_link').click

View File

@ -112,9 +112,9 @@ describe "scheduler" do
reserve_appointment_for(@student1, @student1, @app1)
expect(@app1.appointments.first.workflow_state).to eq('locked')
get "/calendar2"
move_to_click('.fc-event.scheduler-event')
f('.fc-event.scheduler-event').click
wait_for_ajaximations
move_to_click('.unreserve_event_link')
f('.unreserve_event_link').click
expect(f('#delete_event_dialog')).to be_present
f('.ui-dialog-buttonset .btn-primary').click
# save the changes so the appointment object is updated

View File

@ -298,7 +298,7 @@ describe "scheduler" do
load_agenda_view
agenda_item.click
move_to_click('.event-details .unreserve_event_link')
f('.event-details .unreserve_event_link').click
wait_for_ajaximations
f('#delete_event_dialog~.ui-dialog-buttonpane .btn-primary').click

View File

@ -130,8 +130,7 @@ describe "calendar2" do
events = ff('.fc-event')
# Scroll the elements into view
events[0].location_once_scrolled_into_view
events[1].location_once_scrolled_into_view
scroll_into_view(".fc-event")
# Drag object event onto target event
driver.action.move_to(events[0]).click_and_hold.move_to(events[1]).release.perform

View File

@ -496,7 +496,7 @@ describe "context modules" do
it "should show a tooltip for locked icon when module is locked", priority:"1", test_id: 255918 do
go_to_modules
driver.mouse.move_to(f("#context_module_#{@module_2.id} .completion_status .icon-lock"), 0, 0)
driver.action.move_to(f("#context_module_#{@module_2.id} .completion_status .icon-lock"), 0, 0).perform
expect(fj('.ui-tooltip:visible')).to include_text('Locked')
end
@ -525,7 +525,7 @@ describe "context modules" do
it "shows a tooltip when hovering over a completed icon", priority: "1", test_id: 255915 do
go_to_modules
navigate_to_module_item(0, @assignment_1.title)
driver.mouse.move_to(f('.ig-header-admin .completion_status .icon-check'), 0, 0)
driver.action.move_to(f('.ig-header-admin .completion_status .icon-check'), 0, 0).perform
expect(fj('.ui-tooltip:visible')).to include_text('Completed')
end
@ -571,14 +571,14 @@ describe "context modules" do
it "shows tool tip text when hovering over the warning icon for a min score requirement", priority: "1", test_id: 255916 do
grade_assignment(50)
go_to_modules
driver.mouse.move_to(f('.ig-header-admin .completion_status .icon-minimize'), 0, 0)
driver.action.move_to(f('.ig-header-admin .completion_status .icon-minimize'), 0, 0).perform
expect(fj('.ui-tooltip:visible')).to include_text('Started')
end
it "shows tooltip warning for a min score assignemnt", priority: "1", test_id: 255917 do
grade_assignment(50)
go_to_modules
driver.mouse.move_to(f('.ig-row .module-item-status-icon .icon-minimize'), 0, 0)
driver.action.move_to(f('.ig-row .module-item-status-icon .icon-minimize'), 0, 0).perform
expect(fj('.ui-tooltip:visible')).to include_text('You scored a 50. Must score at least a 90.0.')
end

View File

@ -1015,7 +1015,7 @@ describe "context modules" do
get "/courses/#{@course.id}/modules"
expect(f(selector)).to include_text "Multiple Due Dates"
driver.mouse.move_to f("#{selector} a")
driver.action.move_to(f("#{selector} a")).perform
wait_for_ajaximations
tooltip = fj('.vdd_tooltip_content:visible')
@ -1159,7 +1159,7 @@ describe "context modules" do
wait_for_ajax_requests
expect(tag.reload).to be_published
refresh_page
driver.mouse.move_to f('i.icon-unpublish')
driver.action.move_to(f('i.icon-unpublish')).perform
expect(f('span.publish-icon.published.publish-icon-published')).to be_displayed
expect(tag).to be_published
end

View File

@ -103,14 +103,14 @@ describe "conversations new" do
it "should reply to message from mouse hover", priority: "2", test_id: 1069285 do
go_to_inbox_and_select_message
driver.mouse.move_to(f('.message-content .message-item-view'))
driver.action.move_to(f('.message-content .message-item-view')).perform
f('.message-info .reply-btn').click
assert_number_of_recipients(1)
end
it "should reply to all from mouse hover", priority: "2", test_id: 1069836 do
go_to_inbox_and_select_message
driver.mouse.move_to(f('.message-content .message-item-view'))
driver.action.move_to(f('.message-content .message-item-view')).perform
f('.message-info .icon-settings').click
f('.ui-menu-item .reply-all-btn').click
assert_number_of_recipients(2)

View File

@ -127,14 +127,8 @@ describe "discussions" do
close_visible_dialog
f('#edit_discussion_form_buttons .btn-primary[type=submit]').click
wait_for_ajaximations
keep_trying_until do
expect(driver.execute_script(
"return $('.errorBox').filter('[id!=error_box_template]')"
)).to be_present
end
errorBoxes = driver.execute_script("return $('.errorBox').filter('[id!=error_box_template]').toArray();")
visBoxes, hidBoxes = errorBoxes.partition { |eb| eb.displayed? }
expect(visBoxes.first.text).to eq "Please create a group set"
error_box = f("div[role='alert'] .error_text")
expect(error_box.text).to eq "Please create a group set"
end
end

View File

@ -120,14 +120,8 @@ describe "discussions" do
close_visible_dialog
f('#edit_discussion_form_buttons .btn-primary[type=submit]').click
wait_for_ajaximations
keep_trying_until do
expect(driver.execute_script(
"return $('.errorBox').filter('[id!=error_box_template]')"
)).to be_present
end
errorBoxes = driver.execute_script("return $('.errorBox').filter('[id!=error_box_template]').toArray();")
visBoxes, hidBoxes = errorBoxes.partition { |eb| eb.displayed? }
expect(visBoxes.first.text).to eq "Please create a group set"
error_box = f("div[role='alert'] .error_text")
expect(error_box.text).to eq "Please create a group set"
end
end

View File

@ -27,26 +27,34 @@ describe "gradebook" do
before(:each) { user_session(@teacher) }
it "should handle multiple enrollments correctly" do
@course.enroll_student(@student_1, section: @other_section, allow_multiple_enrollments: true)
@course.enroll_student(@student_2, section: @course.default_section, allow_multiple_enrollments: true)
get "/courses/#{@course.id}/gradebook"
# must start on All Sections
fj('.section-select-button:visible').click
fj('.section-select-menu:visible') # wait for options to be visible
f("label[for='section_option_']").click
meta_cells = find_slick_cells(0, f('.grid-canvas'))
meta_cells = find_slick_cells(1, f('.grid-canvas'))
expect(meta_cells[0]).to include_text @course.default_section.display_name
expect(meta_cells[0]).to include_text @other_section.display_name
switch_to_section(@course.default_section)
meta_cells = find_slick_cells(0, f('.grid-canvas'))
expect(meta_cells[0]).to include_text @student_name_1
meta_cells = find_slick_cells(1, f('.grid-canvas'))
expect(meta_cells[0]).to include_text @student_name_2
switch_to_section(@other_section)
meta_cells = find_slick_cells(0, f('.grid-canvas'))
expect(meta_cells[0]).to include_text @student_name_1
expect(meta_cells[0]).to include_text @student_name_2
end
it "should allow showing only a certain section", priority: "1", test_id: 210024 do
get "/courses/#{@course.id}/gradebook"
# grade the first assignment
# must start on All Sections
fj('.section-select-button:visible').click
fj('.section-select-menu:visible') # wait for options to be visible
f("label[for='section_option_']").click
edit_grade('#gradebook_grid .container_1 .slick-row:nth-child(1) .b2', 0)
edit_grade('#gradebook_grid .container_1 .slick-row:nth-child(2) .b2', 1)

View File

@ -162,7 +162,7 @@ describe "Gradezilla editing grades" do
selected_cell = Gradezilla::Cells.grading_cell(@student_1, @second_assignment)
selected_cell.click
driver.action.send_keys(%i[shift tab]).perform
driver.action.key_down(:shift).send_keys(:tab).key_up(:shift).perform
driver.action.send_keys(:tab).perform
driver.action.send_keys(:tab).perform

View File

@ -329,8 +329,8 @@ module AssignmentOverridesSeleniumHelper
end
def validate_vdd_quiz_tooltip_dates(context_selector, message)
driver.mouse.move_to fln('Multiple Dates', f("#{context_selector}"))
expect(fj('.ui-tooltip:visible')).to include_text("#{message}")
driver.action.move_to(fln('Multiple Dates', f(context_selector.to_s))).perform
expect(fj('.ui-tooltip:visible')).to include_text(message.to_s)
end
def create_assignment_override(assignment, section, due_date)

View File

@ -31,7 +31,8 @@ module ConferencesCommon
def end_first_conference_in_list
end_conference_button.click
close_modal_if_present
accept_alert
wait_for_ajaximations
end
def delete_recording_button(recording)
@ -42,7 +43,8 @@ module ConferencesCommon
conference = first_conference_in_list(new_conference_list)
recording = first_recording_in_conference(conference)
delete_recording_button(recording).click
close_modal_if_present
accept_alert
wait_for_ajaximations
end
def first_recording_in_conference(conference)

View File

@ -227,7 +227,7 @@ module ConversationsCommon
# First case is for clicking on message gear menu
when opts[:message]
# The More Options gear menu only shows up on mouse over of message
driver.mouse.move_to ff('.message-item-view')[message]
driver.action.move_to(ff('.message-item-view')[message]).perform
wait_for_ajaximations
f('.actions li .inline-block .al-trigger').click
# This case is for clicking on gear menu at conversation heading level
@ -270,7 +270,7 @@ module ConversationsCommon
# makes a message's star and unread buttons visible via mouse over
def hover_over_message(msg)
driver.mouse.move_to(msg)
driver.action.move_to(msg).perform
wait_for_ajaximations
end

View File

@ -62,9 +62,9 @@ module WikiAndTinyCommon
def add_text_to_tiny(text)
clear_wiki_rce
type_in_tiny('textarea.body', text)
type_in_tiny('textarea.body', text + " ") # space is necessary for html to render in tinymce
in_frame wiki_page_body_ifr_id do
f('#tinymce').send_keys(:return)
f('#tinymce').send_keys(:backspace) # delete the space added above for accurate asserting
expect(f('#tinymce')).to include_text(text)
end
end

View File

@ -28,7 +28,7 @@ shared_examples 'profile_settings_page' do |context|
it 'should give option to change profile pic', priority: "2", test_id: pick_test_id(context, student: 68936, teacher: 352617, admin: 352618) do
enable_avatars(false)
get "/profile/settings"
driver.mouse.move_to f('.avatar.profile_pic_link.none')
driver.action.move_to(f('.avatar.profile_pic_link.none')).perform
wait_for_ajaximations
# We want to make sure the tooltip is displayed,
@ -47,7 +47,7 @@ shared_examples 'profile_user_about_page' do |context|
enable_avatars(false)
get "/about/#{@user.id}"
driver.mouse.move_to f('.avatar.profile-link')
driver.action.move_to(f('.avatar.profile-link')).perform
wait_for_ajaximations
# We are checking the title in this tooltip like we do in the one above,

View File

@ -46,12 +46,12 @@ describe 'publishing a quiz' do
end
it 'changes the button\'s text to \'Published\'', priority: "1", test_id: 140649 do
driver.mouse.move_to f('#header')
driver.action.move_to(f('#header')).perform
expect(f('#quiz-publish-link')).to include_text 'Published'
end
it 'changes the button text on hover to |Unpublish|', priority: "1", test_id: 398936 do
driver.mouse.move_to f('#quiz-publish-link')
driver.action.move_to(f('#quiz-publish-link')).perform
expect(f('#quiz-publish-link')).to include_text 'Unpublish'
end

View File

@ -74,7 +74,7 @@ describe 'quizzes stats' do
expect(fj(".report-generator:contains('#{report_type}')")).not_to include_text('Report has been generated')
# move mouse over button
driver.mouse.move_to f('#header')
driver.action.move_to(f('#header')).perform
wait_for_ajaximations
expect(fj(".report-generator:contains('#{report_type}')")).to include_text("Generate #{report_type.downcase} report")
end
@ -88,11 +88,11 @@ describe 'quizzes stats' do
# our env never creates a csv so the best we can do is check for it attempting to download it
# move away so the tooltip can be recreated
driver.mouse.move_to f('#header')
driver.action.move_to(f('#header')).perform
wait_for_ajaximations
# move mouse back over button
driver.mouse.move_to button
driver.action.move_to(button).perform
wait_for_ajaximations
expect(fj('.quiz-report-status:contains("Report is being generated")')).to be_present
end

View File

@ -123,7 +123,7 @@ describe 'taking a quiz' do
begin
fln('Quizzes').click
driver.switch_to.alert.accept
rescue Selenium::WebDriver::Error::NoAlertOpenError
rescue Selenium::WebDriver::Error::NoSuchAlertError
# Do nothing
end
end
@ -134,14 +134,16 @@ describe 'taking a quiz' do
it 'prompts for access code upon resuming the quiz', priority: "1", test_id: 421218 do
skip_if_safari(:alert)
skip('investigate in CCI-182')
start_and_exit_quiz do
expect_new_page_load { fj('a.ig-title', '#assignment-quizzes').click }
expect_new_page_load { f('a.ig-title', '#assignment-quizzes').click }
expect_new_page_load { fln('Resume Quiz').click }
verify_access_code_prompt
end
end
it 'prompts for an access code upon resuming the quiz via the browser back button', priority: "1", test_id: 421222 do
skip('investigate in CCI-182')
skip_if_safari(:alert)
start_and_exit_quiz do
expect_new_page_load { driver.navigate.back }

View File

@ -56,7 +56,7 @@ describe "quizzes" do
get "/courses/#{@course.id}/quizzes"
expect(f('.item-group-container .date-available')).to include_text "Multiple Dates"
driver.mouse.move_to f('.item-group-container .date-available')
driver.action.move_to(f('.item-group-container .date-available')).perform
wait_for_ajaximations
tooltip = fj('.ui-tooltip:visible')
expect(tooltip).to include_text 'New Section'

View File

@ -50,13 +50,13 @@ describe 'quizzes with draft state' do
expect(f('.ig-details .date-available')).to include_text 'Multiple Dates'
# verify tooltips
driver.mouse.move_to f('.ig-details .date-available a')
driver.action.move_to(f('.ig-details .date-available a')).perform
wait_for_ajaximations
tooltip = fj('.ui-tooltip:visible')
expect(tooltip).to include_text 'New Section'
expect(tooltip).to include_text 'Everyone else'
driver.mouse.move_to f('.ig-details .date-due a')
driver.action.move_to(f('.ig-details .date-due a')).perform
wait_for_ajaximations
tooltip = fj('.ui-tooltip:visible')
expect(tooltip).to include_text 'New Section'

View File

@ -40,11 +40,11 @@ describe 'unpublishing a quiz on the quiz show page' do
unpublish_quiz_via_ui
# changes the button's text to |Unpublished|
driver.mouse.move_to f('#preview_quiz_button')
driver.action.move_to(f('#preview_quiz_button')).perform
expect(f('#quiz-publish-link')).to include_text 'Unpublished'
# changes the button text on hover to |Publish|
driver.mouse.move_to f('#quiz-publish-link')
driver.action.move_to(f('#quiz-publish-link')).perform
expect(f('#quiz-publish-link')).to include_text 'Publish'
# displays the 'This quiz is unpublished' message

View File

@ -552,7 +552,7 @@ describe "RCE next tests" do
visit_existing_wiki_edit(@course, page_title)
driver.switch_to.frame('wiki_page_body_ifr')
f('table td').click # put the cursor in the table
f('body').send_keys [:control, :f9]
driver.action.key_down(:control).send_keys(:f9).key_up(:control).perform
driver.switch_to.default_content
expect(f('.tox-pop__dialog button[title="Table properties"]')).to eq(driver.switch_to.active_element)
@ -565,7 +565,7 @@ describe "RCE next tests" do
visit_existing_wiki_edit(@course, page_title)
driver.switch_to.frame('wiki_page_body_ifr')
f('a').click # put the cursor in the table
f('body').send_keys [:control, :f9]
driver.action.key_down(:control).send_keys(:f9).key_up(:control).perform
driver.switch_to.default_content
expect(f('.tox-pop__dialog button[title="Show link options"]')).to eq(driver.switch_to.active_element)

View File

@ -42,9 +42,11 @@ describe "RCS sidebar tests" do
click_pages_accordion
click_new_page_link
wait_for_ajaximations
expect(new_page_name_input).to be_displayed
new_page_name_input.send_keys(title)
click_new_page_submit
wait_for_ajaximations
in_frame wiki_page_body_ifr_id do
expect(wiki_body_anchor.attribute('href')).to include title

View File

@ -34,6 +34,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
end
it "should add a file to the page and validate a student can see it" do
skip('investigate in CCI-182')
create_session(@teacher.pseudonym)
add_file_to_rce

View File

@ -126,6 +126,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Files" do
end
it "should be able to upload a file and add the file to the rce" do
skip('investigate in CCI-182')
add_file_to_rce
check_file(f('#wiki_page_show a.instructure_file_link'))
end

View File

@ -88,6 +88,7 @@ describe "Wiki pages and Tiny WYSIWYG editor Images" do
end
it "should show images uploaded on the files tab in the image list" do
skip('investigate in CCI-182')
wiki_page_tools_file_tree_setup(true, true)
click_files_tab
wait_for_ajaximations

View File

@ -65,9 +65,15 @@ module CustomValidators
end
def expect_flash_message(type = :warning, message = nil)
selector = ".ic-flash-#{type}"
selector << ":contains(#{message.inspect})" if message
expect(f("#flash_message_holder")).to contain_jqcss(selector)
if message
keep_trying_until(5) do
disable_implicit_wait do
expect(ff("#flash_message_holder .ic-flash-#{type}")).to be_any { |el| el.text.include?(message) }
end
end
else
expect(f("#flash_message_holder .ic-flash-#{type}")).to be_displayed
end
end
def expect_instui_flash_message(message = nil)
@ -110,6 +116,7 @@ module CustomValidators
driver.execute_script("window.INST = window.INST || {}; INST.still_on_old_page = true;")
yield if block_given?
wait_for(method: :wait_for_new_page_load) do
driver.switch_to.alert.accept rescue Selenium::WebDriver::Error::NoSuchAlertError
begin
driver.execute_script("return window.INST && INST.still_on_old_page !== true;")
rescue Selenium::WebDriver::Error::UnexpectedAlertOpenError, Selenium::WebDriver::Error::UnknownError

View File

@ -16,7 +16,7 @@
# with this program. If not, see <http://www.gnu.org/licenses/>.
require "fileutils"
require 'chromedriver-helper'
require 'webdrivers/chromedriver'
require_relative "common_helper_methods/custom_alert_actions"
require_relative 'common_helper_methods/custom_screen_actions'
@ -71,7 +71,7 @@ module SeleniumDriverSetup
# prevents subsequent specs from failing because tooltips are showing etc.
def move_mouse_to_known_position
driver.action.move_to(f("body"), 0, 0) if driver.ready_for_interaction
driver.action.move_to(f("body"), 0, 0).perform if driver.ready_for_interaction
end
class ServerStartupError < RuntimeError; end
@ -330,17 +330,15 @@ module SeleniumDriverSetup
def ruby_chrome_driver
puts "Thread: provisioning local chrome driver"
Chromedriver.set_version(CONFIG[:chromedriver_version] || "74.0.3729.6")
Webdrivers::Chromedriver.required_version = (CONFIG[:chromedriver_version] || "78.0.3904.105")
chrome_options = Selenium::WebDriver::Chrome::Options.new
chrome_options.add_argument('--disable-impl-side-painting')
# put `auto_open_devtools: true` in your selenium.yml if you want to have
# the chrome dev tools open by default by selenium
if CONFIG[:auto_open_devtools]
chrome_options.add_argument('--auto-open-devtools-for-tabs')
end
Selenium::WebDriver.for :chrome, options: chrome_options
Selenium::WebDriver.for :chrome, desired_capabilities: desired_capabilities, options: chrome_options
end
def ruby_safari_driver
@ -372,8 +370,7 @@ module SeleniumDriverSetup
when :chrome
caps = Selenium::WebDriver::Remote::Capabilities.chrome
caps['chromeOptions'] = {
args: %w[disable-dev-shm-usage no-sandbox start-maximized],
w3c: false
args: %w[disable-dev-shm-usage no-sandbox start-maximized]
}
when :edge
# TODO: options for edge driver