На PhantomJS 1.9.2, ubuntu 12 LTS и Ghostdirver 1.04 вместе с селеном 2.35 Я получаю зависающие процессы phantomjs после моих тестов. Кто-нибудь знает, как это исправить?
Вот тестовая программа, демонстрирующая нечетное поведение:
package testing;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;
public class PhantomIsNotKilledDemo {
private static WebDriver getDriver(){
String browserPathStr = System.getProperty("selenium.pathToBrowser");
if (browserPathStr == null) browserPathStr = "/home/user1/apps/phantomjs/bin/phantomjs";
DesiredCapabilities caps = DesiredCapabilities.phantomjs();
caps.setCapability("takesScreenshot", true);
caps.setCapability(
PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
browserPathStr );
WebDriver driver = new PhantomJSDriver(caps);
return driver;
}
public static void main(String[] args) {
int max = 10;
for (int i = 0; i < max; i++){
WebDriver d1 = getDriver();
d1.get("http://www.imdb.com/title/tt1951264");
System.out.println("done with cycle " + (i+1) +" of "+max);
d1.close();
//d1.quit();
}
System.out.println("done");
System.exit(0);
}
}
Чтобы запустить это, вы должны указать путь к вашему двоичному файлу phantomjs как системное свойство или установить соответствующую переменную.
После выполнения этого запуска я выполняю эту команду оболочки
ps -ef | grep phantomjs
и найти 10 зависающих процессов phantomjs.
Если я использую d1.quit()
вместо этого, я получаю без висячего процесса. Это явно лучше, но все же я ожидал получить тот же результат с .close
.
Обратите внимание, что это крестовый знак https://github.com/detro/ghostdriver/issues/162#issuecomment-25536311
Обновление. Это сообщение изменяется в соответствии с предложением Ричарда (см. ниже).