Dart / Selenium: запуск Chrome из пользовательского каталога - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь реализовать базовый c фреймворк для веб-тестирования в dart, используя следующую библиотеку: https://pub.dev/packages/webdriver

Проблема в том, что у меня есть dev-канал * Установлено Chrome, которое находится в другом каталоге, чем канал выпуска.

В Java я мог бы обойти использование простого метода try-catch:

try {
            System.out.println("Trying to launch Chrome from standard directory!");
            driver = new ChromeDriver();
        }
        catch (Exception e) {
            System.out.println("Trying to launch Chrome from beta directory!");
            driver = new ChromeDriver(new ChromeOptions()
                    .setBinary("c:\\Program Files (x86)\\Google\\Chrome Beta\\Application\\chrome.exe"));
        }

Но в реализации dart я не могу сделать то же самое.

Я обнаружил, что сначала мне нужно запустить ChromeDriverProcess, указав путь с помощью параметра workingDirectory:

Process chromeDriverProcess;
chromeDriverProcess = await Process
    .start('chromedriver', ['--port=4444', '--url-base=wd/hub'],
            workingDirectory:  'c:\\Program Files (x86)\\Google\\Chrome Beta\\Application');

    await for (String browserOut in const LineSplitter()
        .bind(UTF8.decoder.bind(chromeDriverProcess.stdout))) {
      if (browserOut.contains('Starting ChromeDriver')) {
        break;
      }

Затем Я создаю WebDriver:

try { driver = await createDriver(
      uri: Uri.parse('http://localhost:4444/wd/hub/'),
      desired: Capabilities.chrome);
      print('BrowserHandler._launchChrome: ChromeDriver initialized');
    }
    catch (Exception) {
      print('BrowserHandler._launchChrome: ChromeDriver initialization failed');
      print(Exception.toString());
      return;
    }

Согласно моим журналам консоли (и отладочной информации), ChromeDriverProccess запускается успешно.

После этого инициализируется WebDriver:

print('BrowserHandler._launchChrome: initializing ChromeDriver');
    try { driver = await createDriver(
      uri: Uri.parse('http://localhost:4444/wd/hub/'),
      desired: Capabilities.chrome);
      print('BrowserHandler._launchChrome: ChromeDriver initialized');
    }
    catch (Exception) {
      print('BrowserHandler._launchChrome: ChromeDriver initialization failed');
      print(Exception.toString());
      return;
    }

Но по какой-то причине, когда я пытаюсь получить переменную драйвера, используя геттер, она всегда возвращает ноль:

BrowserUtilities.openWebsite(BrowserHandler.getWebDriver(),
            'https://google.com');

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. 1029 *

Кто сталкивался с этой проблемой или может указать мне направление, чтобы найти точную причину проблемы?

...