| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | <?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 Facebook\WebDriver\WebDriver;use Facebook\WebDriver\WebDriverAlert;use Facebook\WebDriver\WebDriverElement;use Facebook\WebDriver\WebDriverTargetLocator;/** * Used to locate a given frame or window for RemoteWebDriver. */class RemoteTargetLocator implements WebDriverTargetLocator{    /**     * @var ExecuteMethod     */    protected $executor;    /**     * @var WebDriver     */    protected $driver;    public function __construct($executor, $driver)    {        $this->executor = $executor;        $this->driver = $driver;    }    /**     * Switch to the main document if the page contains iframes. Otherwise, switch     * to the first frame on the page.     *     * @return WebDriver The driver focused on the top window or the first frame.     */    public function defaultContent()    {        $params = ['id' => null];        $this->executor->execute(DriverCommand::SWITCH_TO_FRAME, $params);        return $this->driver;    }    /**     * Switch to the iframe by its id or name.     *     * @param WebDriverElement|string $frame The WebDriverElement,     * the id or the name of the frame.     * @return WebDriver The driver focused on the given frame.     */    public function frame($frame)    {        if ($frame instanceof WebDriverElement) {            $id = ['ELEMENT' => $frame->getID()];        } else {            $id = (string) $frame;        }        $params = ['id' => $id];        $this->executor->execute(DriverCommand::SWITCH_TO_FRAME, $params);        return $this->driver;    }    /**     * Switch the focus to another window by its handle.     *     * @param string $handle The handle of the window to be focused on.     * @return WebDriver The driver focused on the given window.     * @see WebDriver::getWindowHandles     */    public function window($handle)    {        $params = ['name' => (string) $handle];        $this->executor->execute(DriverCommand::SWITCH_TO_WINDOW, $params);        return $this->driver;    }    /**     * Switch to the currently active modal dialog for this particular driver     * instance.     *     * @return WebDriverAlert     */    public function alert()    {        return new WebDriverAlert($this->executor);    }    /**     * Switches to the element that currently has focus within the document     * currently "switched to", or the body element if this cannot be detected.     *     * @return RemoteWebElement     */    public function activeElement()    {        $response = $this->driver->execute(DriverCommand::GET_ACTIVE_ELEMENT, []);        $method = new RemoteExecuteMethod($this->driver);        return new RemoteWebElement($method, $response['ELEMENT']);    }}
 |