All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openqa.selenium.ie.InternetExplorerOptions Maven / Gradle / Ivy

Go to download

Selenium automates browsers. That's it! What you do with that power is entirely up to you.

The newest version!
// 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.

package org.openqa.selenium.ie;

import static java.util.stream.Collectors.toList;
import static org.openqa.selenium.ie.InternetExplorerDriver.BROWSER_ATTACH_TIMEOUT;
import static org.openqa.selenium.ie.InternetExplorerDriver.ELEMENT_SCROLL_BEHAVIOR;
import static org.openqa.selenium.ie.InternetExplorerDriver.ENABLE_PERSISTENT_HOVERING;
import static org.openqa.selenium.ie.InternetExplorerDriver.FORCE_CREATE_PROCESS;
import static org.openqa.selenium.ie.InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION;
import static org.openqa.selenium.ie.InternetExplorerDriver.IE_SWITCHES;
import static org.openqa.selenium.ie.InternetExplorerDriver.IE_USE_PER_PROCESS_PROXY;
import static org.openqa.selenium.ie.InternetExplorerDriver.IGNORE_ZOOM_SETTING;
import static org.openqa.selenium.ie.InternetExplorerDriver.INITIAL_BROWSER_URL;
import static org.openqa.selenium.ie.InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS;
import static org.openqa.selenium.ie.InternetExplorerDriver.NATIVE_EVENTS;
import static org.openqa.selenium.ie.InternetExplorerDriver.REQUIRE_WINDOW_FOCUS;
import static org.openqa.selenium.remote.Browser.IE;
import static org.openqa.selenium.remote.CapabilityType.BROWSER_NAME;

import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.internal.Require;
import org.openqa.selenium.remote.AbstractDriverOptions;

/**
 * Options for configuring the use of IE. Can be used like so:
 *
 * 
InternetExplorerOptions options = new InternetExplorerOptions()
 *   .requireWindowFocus();
 *
 * new InternetExplorerDriver(options);
*/ public class InternetExplorerOptions extends AbstractDriverOptions { public static final String IE_OPTIONS = "se:ieOptions"; private static final String FULL_PAGE_SCREENSHOT = "ie.enableFullPageScreenshot"; private static final String UPLOAD_DIALOG_TIMEOUT = "ie.fileUploadDialogTimeout"; private static final String FORCE_WINDOW_SHELL_API = "ie.forceShellWindowsApi"; private static final String LEGACY_FILE_UPLOAD_DIALOG_HANDLING = "ie.useLegacyFileUploadDialogHandling"; private static final String ATTACH_TO_EDGE_CHROME = "ie.edgechromium"; private static final String EDGE_EXECUTABLE_PATH = "ie.edgepath"; private static final String IGNORE_PROCESS_MATCH = "ie.ignoreprocessmatch"; private static final List CAPABILITY_NAMES = Arrays.asList( BROWSER_ATTACH_TIMEOUT, ELEMENT_SCROLL_BEHAVIOR, ENABLE_PERSISTENT_HOVERING, FULL_PAGE_SCREENSHOT, FORCE_CREATE_PROCESS, FORCE_WINDOW_SHELL_API, IE_ENSURE_CLEAN_SESSION, IE_SWITCHES, IE_USE_PER_PROCESS_PROXY, IGNORE_ZOOM_SETTING, INITIAL_BROWSER_URL, INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, REQUIRE_WINDOW_FOCUS, UPLOAD_DIALOG_TIMEOUT, NATIVE_EVENTS, LEGACY_FILE_UPLOAD_DIALOG_HANDLING, ATTACH_TO_EDGE_CHROME, EDGE_EXECUTABLE_PATH, IGNORE_PROCESS_MATCH); private final Map ieOptions = new HashMap<>(); public InternetExplorerOptions() { setCapability(BROWSER_NAME, IE.browserName()); setCapability(IE_OPTIONS, ieOptions); } public InternetExplorerOptions(Capabilities source) { this(); source.getCapabilityNames().forEach(name -> setCapability(name, source.getCapability(name))); } @Override public InternetExplorerOptions merge(Capabilities extraCapabilities) { InternetExplorerOptions newInstance = new InternetExplorerOptions(); this.asMap().forEach(newInstance::setCapability); extraCapabilities.asMap().forEach(newInstance::setCapability); return newInstance; } public InternetExplorerOptions withAttachTimeout(long duration, TimeUnit unit) { return withAttachTimeout(Duration.ofMillis(unit.toMillis(duration))); } public InternetExplorerOptions withAttachTimeout(Duration duration) { return amend(BROWSER_ATTACH_TIMEOUT, duration.toMillis()); } public InternetExplorerOptions elementScrollTo(ElementScrollBehavior behavior) { return amend(ELEMENT_SCROLL_BEHAVIOR, behavior.getValue()); } /** * Enable persistently sending {@code WM_MOUSEMOVE} messages to the IE window during a mouse * hover. */ public InternetExplorerOptions enablePersistentHovering() { return amend(ENABLE_PERSISTENT_HOVERING, true); } /** Force the use of the Windows CreateProcess API when launching Internet Explorer. */ public InternetExplorerOptions useCreateProcessApiToLaunchIe() { return amend(FORCE_CREATE_PROCESS, true); } /** Use the Windows ShellWindows API when attaching to Internet Explorer. */ public InternetExplorerOptions useShellWindowsApiToAttachToIe() { return amend(FORCE_WINDOW_SHELL_API, true); } /** * Clear the Internet Explorer cache before launching the browser. When set clears the system * cache for all instances of Internet Explorer, even those already running when the driven * instance is launched. */ public InternetExplorerOptions destructivelyEnsureCleanSession() { return amend(IE_ENSURE_CLEAN_SESSION, true); } public InternetExplorerOptions addCommandSwitches(String... switches) { Object raw = getCapability(IE_SWITCHES); if (raw == null) { raw = new LinkedList<>(); } else if (raw instanceof String) { raw = Arrays.asList(((String) raw).split(" ")); } return amend( IE_SWITCHES, Stream.concat(((List) raw).stream(), Stream.of(switches)) .filter(i -> i instanceof String) .map(String.class::cast) .collect(toList())); } /** * Use the {@link org.openqa.selenium.Proxy} defined in other {@link Capabilities} on a * per-process basis, not updating the system installed proxy setting. This is only valid when * setting a {@link org.openqa.selenium.Proxy} where the {@link * org.openqa.selenium.Proxy.ProxyType} is one of * *
    *
  • {@link org.openqa.selenium.Proxy.ProxyType#DIRECT} *
  • {@link org.openqa.selenium.Proxy.ProxyType#MANUAL} *
  • {@link org.openqa.selenium.Proxy.ProxyType#SYSTEM} *
*/ public InternetExplorerOptions usePerProcessProxy() { return amend(IE_USE_PER_PROCESS_PROXY, true); } public InternetExplorerOptions withInitialBrowserUrl(String url) { return amend(INITIAL_BROWSER_URL, Require.nonNull("Initial browser URL", url)); } public InternetExplorerOptions requireWindowFocus() { return amend(REQUIRE_WINDOW_FOCUS, true); } public InternetExplorerOptions waitForUploadDialogUpTo(long duration, TimeUnit unit) { return waitForUploadDialogUpTo(Duration.ofMillis(unit.toMillis(duration))); } public InternetExplorerOptions waitForUploadDialogUpTo(Duration duration) { return amend(UPLOAD_DIALOG_TIMEOUT, duration.toMillis()); } public InternetExplorerOptions introduceFlakinessByIgnoringSecurityDomains() { return amend(INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true); } /** * Method that defines to use whether to use native or javascript events during operations. * * @deprecated Non W3C compliant */ @Deprecated public InternetExplorerOptions disableNativeEvents() { return amend(NATIVE_EVENTS, false); } public InternetExplorerOptions ignoreZoomSettings() { return amend(IGNORE_ZOOM_SETTING, true); } public InternetExplorerOptions takeFullPageScreenshot() { return amend(FULL_PAGE_SCREENSHOT, true); } public InternetExplorerOptions useLegacyUploadDialog() { return amend(LEGACY_FILE_UPLOAD_DIALOG_HANDLING, true); } public InternetExplorerOptions attachToEdgeChrome() { return amend(ATTACH_TO_EDGE_CHROME, true); } public InternetExplorerOptions ignoreProcessMatch() { return amend(IGNORE_PROCESS_MATCH, true); } public InternetExplorerOptions withEdgeExecutablePath(String path) { return amend(EDGE_EXECUTABLE_PATH, path); } private InternetExplorerOptions amend(String optionName, Object value) { setCapability(optionName, value); return this; } @Override public void setCapability(String key, Object value) { if (IE_SWITCHES.equals(key)) { if (value instanceof List) { value = ((List) value).stream().map(Object::toString).collect(Collectors.joining(" ")); } } if (CAPABILITY_NAMES.contains(key)) { ieOptions.put(key, value); } else { // Regular, top level value super.setCapability(key, value); } if (IE_OPTIONS.equals(key)) { ieOptions.clear(); Map streamFrom; if (value instanceof Map) { streamFrom = (Map) value; } else if (value instanceof Capabilities) { streamFrom = ((Capabilities) value).asMap(); } else { throw new IllegalArgumentException( "Value for " + key + " must be of type Map or Capabilities"); } streamFrom.entrySet().stream() .filter(entry -> CAPABILITY_NAMES.contains(entry.getKey())) .filter(entry -> entry.getValue() != null) .forEach( entry -> { if (IE_SWITCHES.equals(entry.getKey())) { setCapability( entry.getKey(), Arrays.asList((entry.getValue().toString()).split(" "))); } else { setCapability(entry.getKey(), entry.getValue()); } }); } } @Override protected Set getExtraCapabilityNames() { return Collections.emptySet(); } @Override protected Object getExtraCapability(String capabilityName) { Require.nonNull("Capability name", capabilityName); return null; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy