Я пытаюсь реализовать базовый 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 *
Кто сталкивался с этой проблемой или может указать мне направление, чтобы найти точную причину проблемы?