이렇게 풀을 만드는 것이 합리적입니다. 나 자신의 풀을 작성하는 대신 고전 Commons Pool 또는 최신 spf4j 풀과 같은 기존 일반 풀을 사용하는 것이 좋습니다.
풀을 사용하려면 사용 후 풀에서 드라이버 코드를 안정적으로 반환해야합니다. 그렇지 않으면 드라이버가 누출되므로 전체 브라우저 인스턴스가 누출됩니다.
따라서, 나는 각 스레드에 드라이버를 할당하는 다른 접근법을 고려할 것입니다. 당신은 ThreadLocal 사용하여이 작업을 수행 할 수 있습니다
private ThreadLocal<WebDriver> drivers = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
return new FirefoxDriver(); // or whatever
}
@Override
public void remove() {
WebDriver driver = get();
if (driver != null) driver.close();
super.remove();
}
@Override
public void set(WebDriver value) {
throw new UnsupportedOperationException();
}
};
하지만 스레드가있어 ThreadLocal에서 자신의 가치를 제거하지 않고 죽을 경우에만 드라이버를 누설하는 것은 여전히 가능하다. 재사용 할 수있는 고정 된 풀 풀이 있다면 잘 될 것입니다.
이 접근법의 단점은 드라이버를 사용해온 모든 스레드에 대해 드라이버를 사용하는 것이 아니라 모든 스레드가 동시에 드라이버를 사용하고있는 경우에도 마찬가지입니다. 드라이버 사용에 전념하는 스레드 풀이 있고 그 밖의 작업을 수행하지 않으면 심각한 문제가되지 않습니다. 그러나 많은 종류의 작업을 수행하는 스레드 풀이 있다면 그렇게 될 것입니다.
TestNG와 같은 것을 사용하고 풀을 관리하도록 고려 했습니까? 설정을 사용하면 허용되는 스레드 수 등을 제한 할 수 있습니다. – JeffC
아직 고려하지 않았습니다. 힌트를 보내 주셔서 감사합니다! 나는 미래의 웹 자동화 작업을 위해 이것을 조사 할 것이다. – saxum