/**
  * Construct the RemoteWebDriver by a desired capabilities.
  *
  * @param string $url The url of the remote server
  * @param DesiredCapabilities $desired_capabilities The desired capabilities
  * @param int $timeout_in_ms
  * @return RemoteWebDriver
  */
 public static function create($url = 'http://localhost:4444/wd/hub', $desired_capabilities = null, $timeout_in_ms = 300000)
 {
     $url = preg_replace('#/+$#', '', $url);
     // Passing DesiredCapabilities as $desired_capabilities is encourged but
     // array is also accepted for legacy reason.
     if ($desired_capabilities instanceof DesiredCapabilities) {
         $desired_capabilities = $desired_capabilities->toArray();
     }
     $executor = new HttpCommandExecutor($url);
     $executor->setTimeout($timeout_in_ms);
     $command = new WebDriverCommand(null, DriverCommand::NEW_SESSION, array('desiredCapabilities' => $desired_capabilities));
     $response = $executor->execute($command);
     $driver = new static();
     $driver->setSessionID($response->getSessionID())->setCommandExecutor($executor);
     return $driver;
 }