106 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Facebook\WebDriver\Chrome;
 | |
| 
 | |
| use Facebook\WebDriver\Local\LocalWebDriver;
 | |
| use Facebook\WebDriver\Remote\DesiredCapabilities;
 | |
| use Facebook\WebDriver\Remote\Service\DriverCommandExecutor;
 | |
| use Facebook\WebDriver\Remote\WebDriverCommand;
 | |
| 
 | |
| class ChromeDriver extends LocalWebDriver
 | |
| {
 | |
|     /** @var ChromeDevToolsDriver */
 | |
|     private $devTools;
 | |
| 
 | |
|     /**
 | |
|      * Creates a new ChromeDriver using default configuration.
 | |
|      * This includes starting a new chromedriver process each time this method is called. However this may be
 | |
|      * unnecessary overhead - instead, you can start the process once using ChromeDriverService and pass
 | |
|      * this instance to startUsingDriverService() method.
 | |
|      *
 | |
|      * @todo Remove $service parameter. Use `ChromeDriver::startUsingDriverService` to pass custom $service instance.
 | |
|      * @return static
 | |
|      */
 | |
|     public static function start(DesiredCapabilities $desired_capabilities = null, ChromeDriverService $service = null)
 | |
|     {
 | |
|         if ($service === null) { // TODO: Remove the condition (always create default service)
 | |
|             $service = ChromeDriverService::createDefaultService();
 | |
|         }
 | |
| 
 | |
|         return static::startUsingDriverService($service, $desired_capabilities);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Creates a new ChromeDriver using given ChromeDriverService.
 | |
|      * This is usable when you for example don't want to start new chromedriver process for each individual test
 | |
|      * and want to reuse the already started chromedriver, which will lower the overhead associated with spinning up
 | |
|      * a new process.
 | |
| 
 | |
|      * @return static
 | |
|      */
 | |
|     public static function startUsingDriverService(
 | |
|         ChromeDriverService $service,
 | |
|         DesiredCapabilities $capabilities = null
 | |
|     ) {
 | |
|         if ($capabilities === null) {
 | |
|             $capabilities = DesiredCapabilities::chrome();
 | |
|         }
 | |
| 
 | |
|         $executor = new DriverCommandExecutor($service);
 | |
|         $newSessionCommand = WebDriverCommand::newSession(
 | |
|             [
 | |
|                 'capabilities' => [
 | |
|                     'firstMatch' => [(object) $capabilities->toW3cCompatibleArray()],
 | |
|                 ],
 | |
|                 'desiredCapabilities' => (object) $capabilities->toArray(),
 | |
|             ]
 | |
|         );
 | |
| 
 | |
|         $response = $executor->execute($newSessionCommand);
 | |
| 
 | |
|         /*
 | |
|          * TODO: in next major version we may not need to use this method, because without OSS compatibility the
 | |
|          * driver creation is straightforward.
 | |
|          */
 | |
|         return static::createFromResponse($response, $executor);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @todo Remove in next major version. The class is internally no longer used and is kept only to keep BC.
 | |
|      * @deprecated Use start or startUsingDriverService method instead.
 | |
|      * @codeCoverageIgnore
 | |
|      * @internal
 | |
|      */
 | |
|     public function startSession(DesiredCapabilities $desired_capabilities)
 | |
|     {
 | |
|         $command = WebDriverCommand::newSession(
 | |
|             [
 | |
|                 'capabilities' => [
 | |
|                     'firstMatch' => [(object) $desired_capabilities->toW3cCompatibleArray()],
 | |
|                 ],
 | |
|                 'desiredCapabilities' => (object) $desired_capabilities->toArray(),
 | |
|             ]
 | |
|         );
 | |
|         $response = $this->executor->execute($command);
 | |
|         $value = $response->getValue();
 | |
| 
 | |
|         if (!$this->isW3cCompliant = isset($value['capabilities'])) {
 | |
|             $this->executor->disableW3cCompliance();
 | |
|         }
 | |
| 
 | |
|         $this->sessionID = $response->getSessionID();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return ChromeDevToolsDriver
 | |
|      */
 | |
|     public function getDevTools()
 | |
|     {
 | |
|         if ($this->devTools === null) {
 | |
|             $this->devTools = new ChromeDevToolsDriver($this);
 | |
|         }
 | |
| 
 | |
|         return $this->devTools;
 | |
|     }
 | |
| }
 | 
