Files
bm/public_html/vendor/facebook/webdriver/lib/Remote/DesiredCapabilities.php
2025-09-24 13:26:28 +02:00

346 lines
9.1 KiB
PHP

<?php
// Copyright 2004-present Facebook. All Rights Reserved.
//
// Licensed 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.
namespace Facebook\WebDriver\Remote;
use Exception;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Firefox\FirefoxDriver;
use Facebook\WebDriver\Firefox\FirefoxPreferences;
use Facebook\WebDriver\Firefox\FirefoxProfile;
use Facebook\WebDriver\WebDriverCapabilities;
use Facebook\WebDriver\WebDriverPlatform;
class DesiredCapabilities implements WebDriverCapabilities
{
/**
* @var array
*/
private $capabilities;
public function __construct(array $capabilities = [])
{
$this->capabilities = $capabilities;
}
/**
* @return string The name of the browser.
*/
public function getBrowserName()
{
return $this->get(WebDriverCapabilityType::BROWSER_NAME, '');
}
/**
* @param string $browser_name
* @return DesiredCapabilities
*/
public function setBrowserName($browser_name)
{
$this->set(WebDriverCapabilityType::BROWSER_NAME, $browser_name);
return $this;
}
/**
* @return string The version of the browser.
*/
public function getVersion()
{
return $this->get(WebDriverCapabilityType::VERSION, '');
}
/**
* @param string $version
* @return DesiredCapabilities
*/
public function setVersion($version)
{
$this->set(WebDriverCapabilityType::VERSION, $version);
return $this;
}
/**
* @param string $name
* @return mixed The value of a capability.
*/
public function getCapability($name)
{
return $this->get($name);
}
/**
* @param string $name
* @param mixed $value
* @return DesiredCapabilities
*/
public function setCapability($name, $value)
{
$this->set($name, $value);
return $this;
}
/**
* @return string The name of the platform.
*/
public function getPlatform()
{
return $this->get(WebDriverCapabilityType::PLATFORM, '');
}
/**
* @param string $platform
* @return DesiredCapabilities
*/
public function setPlatform($platform)
{
$this->set(WebDriverCapabilityType::PLATFORM, $platform);
return $this;
}
/**
* @param string $capability_name
* @return bool Whether the value is not null and not false.
*/
public function is($capability_name)
{
return (bool) $this->get($capability_name);
}
/**
* @todo Remove in next major release (BC)
* @deprecated All browsers are always JS enabled except HtmlUnit and it's not meaningful to disable JS execution.
* @return bool Whether javascript is enabled.
*/
public function isJavascriptEnabled()
{
return $this->get(WebDriverCapabilityType::JAVASCRIPT_ENABLED, false);
}
/**
* This is a htmlUnit-only option.
*
* @param bool $enabled
* @throws Exception
* @return DesiredCapabilities
* @see https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#read-write-capabilities
*/
public function setJavascriptEnabled($enabled)
{
$browser = $this->getBrowserName();
if ($browser && $browser !== WebDriverBrowserType::HTMLUNIT) {
throw new Exception(
'isJavascriptEnabled() is a htmlunit-only option. ' .
'See https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#read-write-capabilities.'
);
}
$this->set(WebDriverCapabilityType::JAVASCRIPT_ENABLED, $enabled);
return $this;
}
/**
* @todo Remove side-effects - not change ie. ChromeOptions::CAPABILITY from instance of ChromeOptions to an array
* @return array
*/
public function toArray()
{
if (isset($this->capabilities[ChromeOptions::CAPABILITY]) &&
$this->capabilities[ChromeOptions::CAPABILITY] instanceof ChromeOptions
) {
$this->capabilities[ChromeOptions::CAPABILITY] =
$this->capabilities[ChromeOptions::CAPABILITY]->toArray();
}
if (isset($this->capabilities[FirefoxDriver::PROFILE]) &&
$this->capabilities[FirefoxDriver::PROFILE] instanceof FirefoxProfile
) {
$this->capabilities[FirefoxDriver::PROFILE] =
$this->capabilities[FirefoxDriver::PROFILE]->encode();
}
return $this->capabilities;
}
/**
* @return static
*/
public static function android()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::ANDROID,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANDROID,
]);
}
/**
* @return static
*/
public static function chrome()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::CHROME,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
]);
}
/**
* @return static
*/
public static function firefox()
{
$caps = new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::FIREFOX,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
]);
// disable the "Reader View" help tooltip, which can hide elements in the window.document
$profile = new FirefoxProfile();
$profile->setPreference(FirefoxPreferences::READER_PARSE_ON_LOAD_ENABLED, false);
$caps->setCapability(FirefoxDriver::PROFILE, $profile);
return $caps;
}
/**
* @return static
*/
public static function htmlUnit()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::HTMLUNIT,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
]);
}
/**
* @return static
*/
public static function htmlUnitWithJS()
{
$caps = new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::HTMLUNIT,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
]);
return $caps->setJavascriptEnabled(true);
}
/**
* @return static
*/
public static function internetExplorer()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::IE,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::WINDOWS,
]);
}
/**
* @return static
*/
public static function microsoftEdge()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::MICROSOFT_EDGE,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::WINDOWS,
]);
}
/**
* @return static
*/
public static function iphone()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::IPHONE,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::MAC,
]);
}
/**
* @return static
*/
public static function ipad()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::IPAD,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::MAC,
]);
}
/**
* @return static
*/
public static function opera()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::OPERA,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
]);
}
/**
* @return static
*/
public static function safari()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::SAFARI,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
]);
}
/**
* @return static
*/
public static function phantomjs()
{
return new static([
WebDriverCapabilityType::BROWSER_NAME => WebDriverBrowserType::PHANTOMJS,
WebDriverCapabilityType::PLATFORM => WebDriverPlatform::ANY,
]);
}
/**
* @param string $key
* @param mixed $value
* @return DesiredCapabilities
*/
private function set($key, $value)
{
$this->capabilities[$key] = $value;
return $this;
}
/**
* @param string $key
* @param mixed $default
* @return mixed
*/
private function get($key, $default = null)
{
return isset($this->capabilities[$key])
? $this->capabilities[$key]
: $default;
}
}