Невозможно запустить программу «START»: ошибка = 2, нет такого файла или каталога при попытке завершить процесс Chrome в MAC - PullRequest
0 голосов
/ 09 мая 2018

Моя IDE - затмение, и я использую Selenium Webdriver на MAC . Каждый раз, когда я выполняю свой код ниже, я хочу убить / закрыть ранее открытый браузер, а затем запустить новый экземпляр и оставить его включенным. В результате за один раз должен быть открыт только один экземпляр браузера. Я делаю это не для тестирования. Я просто делаю это, потому что хочу автоматизировать задачу.

Это ошибка, которую я получаю каждый раз, когда выполняю свой код:

Cannot run program "START": error=2, No such file or directory

Это мой код:

public class Demo {

public static void main(String[] args){

    System.setProperty("webdriver.chrome.driver", "/Users/Downloads/chromedriver/chromedriver");
    WebDriver driver = new ChromeDriver();
    driver.get("https://www.google.com/");
    try{
        Runtime.getRuntime().exec("START taskkill /F /IM chrome.exe");
        System.exit(0);
    }
    catch(IOException io){
        System.out.println(io.getMessage());
    }

}

}

Это нормально работает на windows . Как это исправить в среде MAC / unix / или какие изменения я должен внести в свой код?

Мне сказали, что эта ошибка связана с привилегиями администратора , поэтому я должен запустить eclipse от имени администратора. Итак, я сделал это: sudo open Eclipse.app/. Итак, затмение открылось от имени администратора и выполнило код, но я все еще получал ту же ошибку.

1 Ответ

0 голосов
/ 09 мая 2018

По вашему вопросу, используя следующую строку кода:

Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");

уничтожить браузер клиента процесс будет против всех Best Practices .

При автоматизации через Selenium в соответствии с лучшими практиками, вы должны вызывать метод quit() в tearDown() {}. В соответствии с WebDriver W3C Editor's Draft, вызывающим quit() DELETE s текущего сеанса просмотра посредством отправки "quit" команды с {"flags": ["eForceQuit"]} и, наконец, отправляет запрос GET на / shutdown EndPoint.

В качестве примера можно привести GeckoDriver (вариант WebDriver, совместимый с W3C). Вот последовательность событий:

1503397488598   webdriver::server   DEBUG   -> DELETE /session/8e457516-3335-4d3b-9140-53fb52aa8b74 
1503397488607   geckodriver::marionette TRACE   -> 37:[0,4,"quit",{"flags":["eForceQuit"]}]
1503397488821   webdriver::server   DEBUG   -> GET /shutdown

Таким образом, при вызове метода quit() сеанс Web Client и экземпляр WebDriver полностью уничтожаются. Следовательно, вам не нужно вводить какие-либо дополнительные шаги, которые будут накладными расходами.

Решение

Заменить строку кода:

Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");

С:

driver.quit();

Здесь вы можете найти подробное обсуждение Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?

Дополнительные замечания

  • Убедитесь, что WebDriver Binary имеет разрешение на выполнение для пользователей без полномочий root. (chmod 777)
  • Убедитесь, что двоичный WebDriver присутствует в указанном месте.
  • Выполните Test как пользователь без полномочий root.
  • Всегда вызывайте driver.quit() в методе tearDown(){}, чтобы изящно закрыть и уничтожить WebDriver и Веб-клиент экземпляров.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...