blob: 4445a32192904fb3e846331f94ac015aa23a1dc8 [file] [log] [blame]
# frozen_string_literal: true
# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The SFC licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
require_relative '../spec_helper'
module Selenium
module WebDriver
module Firefox
describe Driver, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :firefox}] do
let(:extensions) { '../../../../../../common/extensions/' }
describe '#print_options' do
let(:magic_number) { 'JVBER' }
before { driver.navigate.to url_for('printPage.html') }
it 'returns base64 for print command' do
expect(driver.print_page).to include(magic_number)
end
it 'prints with orientation' do
expect(driver.print_page(orientation: 'landscape')).to include(magic_number)
end
it 'prints with valid params' do
expect(driver.print_page(orientation: 'landscape',
page_ranges: ['1-2'],
page: {width: 30})).to include(magic_number)
end
it 'prints full page', except: [{platform: :windows,
reason: 'Some issues with resolution?'},
{platform: :macosx,
reason: 'showing half resolution of what expected'}] do
viewport_width = driver.execute_script('return window.innerWidth;')
viewport_height = driver.execute_script('return window.innerHeight;')
path = "#{Dir.tmpdir}/test#{SecureRandom.urlsafe_base64}.png"
screenshot = driver.save_full_page_screenshot(path)
width, height = png_size(screenshot)
expect(width).to be >= viewport_width
expect(height).to be > viewport_height
ensure
FileUtils.rm_rf(path)
end
end
describe '#install_addon' do
it 'install and uninstall xpi file' do
Selenium::WebDriver.logger.level = :debug
ext = File.expand_path("#{extensions}/webextensions-selenium-example.xpi", __dir__)
id = driver.install_addon(ext)
expect(id).to eq 'webextensions-selenium-example-v3@example.com'
driver.navigate.to url_for('blank.html')
injected = driver.find_element(id: 'webextensions-selenium-example')
expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
driver.uninstall_addon(id)
driver.navigate.refresh
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
end
it 'install and uninstall signed zip file' do
ext = File.expand_path("#{extensions}/webextensions-selenium-example.zip", __dir__)
id = driver.install_addon(ext)
expect(id).to eq 'webextensions-selenium-example-v3@example.com'
driver.navigate.to url_for('blank.html')
injected = driver.find_element(id: 'webextensions-selenium-example')
expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
driver.uninstall_addon(id)
driver.navigate.refresh
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
end
it 'install and uninstall unsigned zip file' do
ext = File.expand_path("#{extensions}/webextensions-selenium-example-unsigned.zip", __dir__)
id = driver.install_addon(ext, true)
expect(id).to eq 'webextensions-selenium-example-v3@example.com'
driver.navigate.to url_for('blank.html')
injected = driver.find_element(id: 'webextensions-selenium-example')
expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
driver.uninstall_addon(id)
driver.navigate.refresh
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
end
it 'install and uninstall signed directory', except: {browser: :firefox,
platform: :windows,
reason: 'signature must be different for windows,
skipping everywhere until Firefox 127 is released'} do
ext = File.expand_path("#{extensions}/webextensions-selenium-example-signed/", __dir__)
id = driver.install_addon(ext)
expect(id).to eq 'webextensions-selenium-example-v3@example.com'
driver.navigate.to url_for('blank.html')
injected = driver.find_element(id: 'webextensions-selenium-example')
expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
driver.uninstall_addon(id)
driver.navigate.refresh
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
end
it 'install and uninstall unsigned directory' do
ext = File.expand_path("#{extensions}/webextensions-selenium-example/", __dir__)
id = driver.install_addon(ext, true)
expect(id).to eq 'webextensions-selenium-example-v3@example.com'
driver.navigate.to url_for('blank.html')
injected = driver.find_element(id: 'webextensions-selenium-example')
expect(injected.text).to eq 'Content injected by webextensions-selenium-example'
driver.uninstall_addon(id)
driver.navigate.refresh
expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty
end
end
it 'can get and set context' do
reset_driver!(prefs: {'browser.download.dir': 'foo/bar'}) do |driver|
expect(driver.context).to eq 'content'
driver.context = 'chrome'
expect(driver.context).to eq 'chrome'
# This call can not be made when context is set to 'content'
dir = driver.execute_script("return Services.prefs.getStringPref('browser.download.dir')")
expect(dir).to eq 'foo/bar'
end
end
end
end # Firefox
end # WebDriver
end # Selenium