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 momentoQuando 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?