DriverCommandExecutor.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. // Copyright 2004-present Facebook. All Rights Reserved.
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. namespace Facebook\WebDriver\Remote\Service;
  16. use Facebook\WebDriver\Exception\WebDriverException;
  17. use Facebook\WebDriver\Remote\DriverCommand;
  18. use Facebook\WebDriver\Remote\HttpCommandExecutor;
  19. use Facebook\WebDriver\Remote\WebDriverCommand;
  20. use Facebook\WebDriver\Remote\WebDriverResponse;
  21. /**
  22. * A HttpCommandExecutor that talks to a local driver service instead of
  23. * a remote server.
  24. */
  25. class DriverCommandExecutor extends HttpCommandExecutor
  26. {
  27. /**
  28. * @var DriverService
  29. */
  30. private $service;
  31. public function __construct(DriverService $service)
  32. {
  33. parent::__construct($service->getURL());
  34. $this->service = $service;
  35. }
  36. /**
  37. * @param WebDriverCommand $command
  38. *
  39. * @throws WebDriverException
  40. * @throws \Exception
  41. * @return WebDriverResponse
  42. */
  43. public function execute(WebDriverCommand $command)
  44. {
  45. if ($command->getName() === DriverCommand::NEW_SESSION) {
  46. $this->service->start();
  47. }
  48. try {
  49. $value = parent::execute($command);
  50. if ($command->getName() === DriverCommand::QUIT) {
  51. $this->service->stop();
  52. }
  53. return $value;
  54. } catch (\Exception $e) {
  55. if (!$this->service->isRunning()) {
  56. throw new WebDriverException('The driver server has died.');
  57. }
  58. throw $e;
  59. }
  60. }
  61. }