| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | <?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;use Facebook\WebDriver\Exception\IndexOutOfBoundsException;use Facebook\WebDriver\Remote\DriverCommand;use Facebook\WebDriver\Remote\ExecuteMethod;/** * An abstraction allowing the driver to manipulate the browser's window */class WebDriverWindow{    /**     * @var ExecuteMethod     */    protected $executor;    public function __construct(ExecuteMethod $executor)    {        $this->executor = $executor;    }    /**     * Get the position of the current window, relative to the upper left corner     * of the screen.     *     * @return WebDriverPoint The current window position.     */    public function getPosition()    {        $position = $this->executor->execute(            DriverCommand::GET_WINDOW_POSITION,            [':windowHandle' => 'current']        );        return new WebDriverPoint(            $position['x'],            $position['y']        );    }    /**     * Get the size of the current window. This will return the outer window     * dimension, not just the view port.     *     * @return WebDriverDimension The current window size.     */    public function getSize()    {        $size = $this->executor->execute(            DriverCommand::GET_WINDOW_SIZE,            [':windowHandle' => 'current']        );        return new WebDriverDimension(            $size['width'],            $size['height']        );    }    /**     * Maximizes the current window if it is not already maximized     *     * @return WebDriverWindow The instance.     */    public function maximize()    {        $this->executor->execute(            DriverCommand::MAXIMIZE_WINDOW,            [':windowHandle' => 'current']        );        return $this;    }    /**     * Set the size of the current window. This will change the outer window     * dimension, not just the view port.     *     * @param WebDriverDimension $size     * @return WebDriverWindow The instance.     */    public function setSize(WebDriverDimension $size)    {        $params = [            'width' => $size->getWidth(),            'height' => $size->getHeight(),            ':windowHandle' => 'current',        ];        $this->executor->execute(DriverCommand::SET_WINDOW_SIZE, $params);        return $this;    }    /**     * Set the position of the current window. This is relative to the upper left     * corner of the screen.     *     * @param WebDriverPoint $position     * @return WebDriverWindow The instance.     */    public function setPosition(WebDriverPoint $position)    {        $params = [            'x' => $position->getX(),            'y' => $position->getY(),            ':windowHandle' => 'current',        ];        $this->executor->execute(DriverCommand::SET_WINDOW_POSITION, $params);        return $this;    }    /**     * Get the current browser orientation.     *     * @return string Either LANDSCAPE|PORTRAIT     */    public function getScreenOrientation()    {        return $this->executor->execute(DriverCommand::GET_SCREEN_ORIENTATION);    }    /**     * Set the browser orientation. The orientation should either     * LANDSCAPE|PORTRAIT     *     * @param string $orientation     * @throws IndexOutOfBoundsException     * @return WebDriverWindow The instance.     */    public function setScreenOrientation($orientation)    {        $orientation = mb_strtoupper($orientation);        if (!in_array($orientation, ['PORTRAIT', 'LANDSCAPE'])) {            throw new IndexOutOfBoundsException(                'Orientation must be either PORTRAIT, or LANDSCAPE'            );        }        $this->executor->execute(            DriverCommand::SET_SCREEN_ORIENTATION,            ['orientation' => $orientation]        );        return $this;    }}
 |