Se você está buscando criar automações ou testes robustos, o Selenium WebDriver é uma excelente opção. Trata-se de uma coleção de vínculos específicos de linguagem que permitem controlar um navegador. Neste exemplo, vamos explorar como adicionar automaticamente um arquivo para um campo de input do tipo “file” para realizar um upload.

Considere o exemplo abaixo de um elemento <input> em um formulário:

<form ...>

<!-- input para upload de arquivos -->
<input type="file" id="input_upload"></input>

</form>

Antes de prosseguir, é necessário adicionar as dependências no cabeçalho do arquivo PHP:

require_once '/diretorio_selenium/vendor/autoload.php';
use Facebook\WebDriver\Remote\LocalFileDetector;

Após adicionar as dependências, devemos passar o ID do campo de input para o Selenium. Também é necessário criar uma variável e informar o caminho em que o Selenium deve buscar o arquivo para o upload no computador local. Para isso, criamos uma nova instância do tipo LocalFileDetector() e enviamos o caminho do arquivo para o campo de input.

//Define o campo input do formulário para o selenium
$fileInput = $driver->findElement(WebDriverBy::id('input_upload'));

// define o 'FileDetector' para o campo input
$fileInput->setFileDetector(new LocalFileDetector());

//Define o caminho do arquivo no computador local
$arquivo = 'D:\\pasta\\arquivo.pdf'; // informa o caminho para o selenium, realiza upload e da um submit no formulário $fileInput->sendKeys($arquivo) ->submit();

Com essa abordagem, você pode automatizar o processo de upload de arquivos em seus testes utilizando o Selenium WebDriver.

Fonte: link da fonte

Lembre-se de que é importante adaptar o código às suas necessidades específicas, como alterar os caminhos dos arquivos e IDs dos elementos, de acordo com a sua aplicação.