Используя composer скрипт с дефисом в имени? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь использовать следующий скрипт из Github: https://github.com/php-webdriver/php-webdriver

Установка с composer в "/ mnt / hgfs /" была простой, но загрузка класс в файле php кажется невозможным

Как видите, в имени есть дефис, и я не могу загрузить класс каким-либо образом. Я много гуглил и перепробовал много вещей, но та же проблема, либо я получаю:

Пытаюсь использовать дефис в пространстве имен и получаю

PHP Ошибка разбора : синтаксическая ошибка, неожиданное '-', ожидание '{' в /mnt/hgfs/test.php в строке 3

Замена дефиса подчеркиванием или просто удаление его, я получаю:

PHP Неустранимая ошибка: необнаруженная ошибка: класс 'php_webdriver \ WebDriver \ Remote \ DesiredCapabilities' не найден в /mnt/hgfs/test.php:10

Вот так выглядит мой код (/mnt/hgfs/test.php):

namespace php_webdriver\WebDriver;
require 'vendor/autoload.php';
use php_webdriver\WebDriver\Chrome\ChromeOptions;
use php_webdriver\WebDriver\Chrome\ChromeDriver;
use php_webdriver\WebDriver\Remote\DesiredCapabilities;
use php_webdriver\WebDriver\Remote\RemoteWebDriver;

$host = 'http://localhost:4444/wd/hub'; // this is the default
$capabilities = DesiredCapabilities::htmlUnitWithJS();
{
    $options = new ChromeOptions();
    $options->addArguments(array(
        '--disable-extensions',
        '--no-sandbox',
        '--headless',
        '--no-proxy-server'
    ));
    $capabilities = DesiredCapabilities::chrome();
    $capabilities->setCapability(ChromeOptions::CAPABILITY, $options);
    $capabilities->setPlatform("Linux");
}
$driver_spec = RemoteWebDriver::create($host, $capabilities, 600000, 600000);

Как мне загрузить этот класс?

1 Ответ

2 голосов
/ 17 января 2020

Здесь есть пара неправильных вещей:

namespace php_webdriver\WebDriver; 

Вы не должны пытаться добавить свой код в пространство имен веб-драйвера. Для тестового сценария вам не нужно ваше собственное пространство имен. Вы, вероятно, можете удалить эту строку.

Что касается:

require 'vendor/autoload.php';
use php_webdriver\WebDriver\Chrome\ChromeOptions;
use php_webdriver\WebDriver\Chrome\ChromeDriver;
use php_webdriver\WebDriver\Remote\DesiredCapabilities;
use php_webdriver\WebDriver\Remote\RemoteWebDriver;

У меня сложилось впечатление, что вы не на 100% знакомы с тем, как работает PSR-4 / автозагрузка. Пространство имен отображается в каталог кода с помощью autoload.php, и эти два не обязательно должны иметь одинаковую структуру имен.

Взгляните на composer.json в проекте webdriver и обратите внимание на раздел PSR-4.

"Facebook\\WebDriver\\": "lib/" говорит вам, что все в каталоге lib должно рассматриваться как находящееся в пространстве имен Facebook\WebDriver.

Попробуйте

require 'vendor/autoload.php';
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Chrome\ChromeDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
...