123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- <?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\Interactions;
- use Facebook\WebDriver\Interactions\Internal\WebDriverButtonReleaseAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverClickAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverClickAndHoldAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverContextClickAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverDoubleClickAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverKeyDownAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverKeyUpAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverMouseMoveAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverMoveToOffsetAction;
- use Facebook\WebDriver\Interactions\Internal\WebDriverSendKeysAction;
- use Facebook\WebDriver\WebDriver;
- use Facebook\WebDriver\WebDriverElement;
- use Facebook\WebDriver\WebDriverHasInputDevices;
- /**
- * WebDriver action builder. It implements the builder pattern.
- */
- class WebDriverActions
- {
- protected $driver;
- protected $keyboard;
- protected $mouse;
- protected $action;
- /**
- * @param WebDriverHasInputDevices $driver
- */
- public function __construct(WebDriverHasInputDevices $driver)
- {
- $this->driver = $driver;
- $this->keyboard = $driver->getKeyboard();
- $this->mouse = $driver->getMouse();
- $this->action = new WebDriverCompositeAction();
- }
- /**
- * A convenience method for performing the actions without calling build().
- */
- public function perform()
- {
- $this->action->perform();
- }
- /**
- * Mouse click.
- * If $element is provided, move to the middle of the element first.
- *
- * @param WebDriverElement $element
- * @return WebDriverActions
- */
- public function click(WebDriverElement $element = null)
- {
- $this->action->addAction(
- new WebDriverClickAction($this->mouse, $element)
- );
- return $this;
- }
- /**
- * Mouse click and hold.
- * If $element is provided, move to the middle of the element first.
- *
- * @param WebDriverElement $element
- * @return WebDriverActions
- */
- public function clickAndHold(WebDriverElement $element = null)
- {
- $this->action->addAction(
- new WebDriverClickAndHoldAction($this->mouse, $element)
- );
- return $this;
- }
- /**
- * Context-click (right click).
- * If $element is provided, move to the middle of the element first.
- *
- * @param WebDriverElement $element
- * @return WebDriverActions
- */
- public function contextClick(WebDriverElement $element = null)
- {
- $this->action->addAction(
- new WebDriverContextClickAction($this->mouse, $element)
- );
- return $this;
- }
- /**
- * Double click.
- * If $element is provided, move to the middle of the element first.
- *
- * @param WebDriverElement $element
- * @return WebDriverActions
- */
- public function doubleClick(WebDriverElement $element = null)
- {
- $this->action->addAction(
- new WebDriverDoubleClickAction($this->mouse, $element)
- );
- return $this;
- }
- /**
- * Drag and drop from $source to $target.
- *
- * @param WebDriverElement $source
- * @param WebDriverElement $target
- * @return WebDriverActions
- */
- public function dragAndDrop(WebDriverElement $source, WebDriverElement $target)
- {
- $this->action->addAction(
- new WebDriverClickAndHoldAction($this->mouse, $source)
- );
- $this->action->addAction(
- new WebDriverMouseMoveAction($this->mouse, $target)
- );
- $this->action->addAction(
- new WebDriverButtonReleaseAction($this->mouse, $target)
- );
- return $this;
- }
- /**
- * Drag $source and drop by offset ($x_offset, $y_offset).
- *
- * @param WebDriverElement $source
- * @param int $x_offset
- * @param int $y_offset
- * @return WebDriverActions
- */
- public function dragAndDropBy(WebDriverElement $source, $x_offset, $y_offset)
- {
- $this->action->addAction(
- new WebDriverClickAndHoldAction($this->mouse, $source)
- );
- $this->action->addAction(
- new WebDriverMoveToOffsetAction($this->mouse, null, $x_offset, $y_offset)
- );
- $this->action->addAction(
- new WebDriverButtonReleaseAction($this->mouse, null)
- );
- return $this;
- }
- /**
- * Mouse move by offset.
- *
- * @param int $x_offset
- * @param int $y_offset
- * @return WebDriverActions
- */
- public function moveByOffset($x_offset, $y_offset)
- {
- $this->action->addAction(
- new WebDriverMoveToOffsetAction($this->mouse, null, $x_offset, $y_offset)
- );
- return $this;
- }
- /**
- * Move to the middle of the given WebDriverElement.
- * Extra shift, calculated from the top-left corner of the element, can be set by passing $x_offset and $y_offset
- * parameters.
- *
- * @param WebDriverElement $element
- * @param int $x_offset
- * @param int $y_offset
- * @return WebDriverActions
- */
- public function moveToElement(WebDriverElement $element, $x_offset = null, $y_offset = null)
- {
- $this->action->addAction(new WebDriverMoveToOffsetAction(
- $this->mouse,
- $element,
- $x_offset,
- $y_offset
- ));
- return $this;
- }
- /**
- * Release the mouse button.
- * If $element is provided, move to the middle of the element first.
- *
- * @param WebDriverElement $element
- * @return WebDriverActions
- */
- public function release(WebDriverElement $element = null)
- {
- $this->action->addAction(
- new WebDriverButtonReleaseAction($this->mouse, $element)
- );
- return $this;
- }
- /**
- * Press a key on keyboard.
- * If $element is provided, focus on that element first.
- *
- * @see WebDriverKeys for special keys like CONTROL, ALT, etc.
- * @param WebDriverElement $element
- * @param string $key
- * @return WebDriverActions
- */
- public function keyDown(WebDriverElement $element = null, $key = null)
- {
- $this->action->addAction(
- new WebDriverKeyDownAction($this->keyboard, $this->mouse, $element, $key)
- );
- return $this;
- }
- /**
- * Release a key on keyboard.
- * If $element is provided, focus on that element first.
- *
- * @see WebDriverKeys for special keys like CONTROL, ALT, etc.
- * @param WebDriverElement $element
- * @param string $key
- * @return WebDriverActions
- */
- public function keyUp(WebDriverElement $element = null, $key = null)
- {
- $this->action->addAction(
- new WebDriverKeyUpAction($this->keyboard, $this->mouse, $element, $key)
- );
- return $this;
- }
- /**
- * Send keys by keyboard.
- * If $element is provided, focus on that element first.
- *
- * @see WebDriverKeys for special keys like CONTROL, ALT, etc.
- * @param WebDriverElement $element
- * @param string $keys
- * @return WebDriverActions
- */
- public function sendKeys(WebDriverElement $element = null, $keys = null)
- {
- $this->action->addAction(
- new WebDriverSendKeysAction(
- $this->keyboard,
- $this->mouse,
- $element,
- $keys
- )
- );
- return $this;
- }
- }
|