Rastrear instâncias mortas do WebDriver durante a tarefa paralela

Eu estou vendo alguma estranheza de instância morta executando testes paralelos de estresse da web de loop aninhado usando o Selenium WebDriver, exemplo simples, digamos, atingir 300 páginas únicas com 100 impressões cada.

Estou "com sucesso" recebendo de 4 a 8 instâncias do WebDriver usando umaThreadLocal<FirefoxWebDriver> para isolá-los por thread de tarefa e MaxDegreeOfParallelism em uma instância ParallelOptions para limitar os segmentos. Estou particionando e paralelizando apenas o loop externo (a coleção de páginas) e verificando.IsValueCreated noThreadLocal<> contêiner dentro do início do método "tarefa em execução longa" de cada partição. Para facilitar a limpeza mais tarde, adiciono cada nova instância a um ConcurrentDictionary codificado por id de thread.

Não importa qual estratégia de paralelização ou particionamento eu use, as instâncias do WebDriver ocasionalmente farão um dos seguintes:

Inicie, mas nunca mostre um URL ou execute uma impressãoLançar, executar qualquer número de impressões bem e, em seguida, apenas ficar ocioso em algum momento

Quando um desses acontece, o loop paraleloeventualmente parece notar que um thread não está fazendo nada, e isso gera uma nova partição. E sen é o número de threads permitido, isso resulta em tern segmentos produtivos apenas cerca de 50-60% do tempo.

A limpeza ainda funciona bem no final; pode haver 2n navegadores abertos ou mais, mas os produtivos e improdutivos se limpam.

Existe uma maneira de monitorar essas instâncias inúteis do WebDriver e a) limpá-las imediatamente, além de b) obter o loop paralelo para substituir o segmento de tarefas imediatamente, em vez de ficar atrasado por vários minutos, como costuma acontecer agora?

questionAnswers(2)

yourAnswerToTheQuestion