Mudanças do Selenium 4

22 de novembro de 2021

Lista de mudanças

Sem enrolação, aqui está a lista de mudanças que falarei no decorrer do post.

Screenshot através do elemento

Logo na versão v4.0.0.0-alpha-1 foi incluído a capacidade de tirar screenshot por meio de um WebElement, utilizando a interface TakesScreenshot que a interface de WebElement passou a estender.

Para utilizar o comando, basta chamar seu WebElement com o método

element.getScreenshotAs(outputType);

que exige um argumento do tipo OutputType<X>, o qual é uma interface onde X indica o tipo de retorno da implementação. Possui as implementações para: BASE64 com retorno de String, BYTES com retorno de byte[] e FILE com retorno de File.


OBS.: Caso use OutputType.FILE, saiba que o arquivo é temporário, e será apagado assim que a JVM encerrar. No Windows, o arquivo se encontra em C:\Users\seuUsuario\AppData\Local\Temp\.


Localizadores Relativos

Além das formas tradicionais de localizar um elemento na página, agora é possível utilizar localizadores relativos, onde encontra elementos próximos de outros.

Os métodos disponíveis são: above, below, toLeftOf, toRightOf e near.

Para utilizar, deve ser utilizado o método estático RelativeLocator.with(By by) que retorna uma classe que estende By. É essa classe (RelativeLocator.RelativeBy) que possui os métodos citados acima. Como é uma estensão de By, os métodos utilizados para encontrar elementos podem ser utilizados da mesma forma antes da adição.

Um exemplo utilizando o método below em uma busca no Google.

By searchButtonSelector = By.cssSelector("input[type='submit']");
WebElement searchField = driver.findElement(By.name("q"));
searchField.sendKeys("Selenium 4");
WebElement searchButton = driver.findElement(
                                    with(searchButtonSelector)
                                    .below(searchField));

searchButton.click();

Remoção de métodos utilitários de busca

Antes da versão 4 do Selenium, você podia selecionar um método específico para realizar a busca de um elemento de acordo com a forma desejada. Exemplo: findElementByClassName, findElementById, findElementByXpath etc.

Na versão mais recente, tais métodos foram removidos, e é necessário utilizar findElement(By by), onde by identificará a forma desejada para a busca. A mudança também se aplica para os métodos findElementsBy*

Alteração das classes utilizadas para Timeout

Tanto métodos quanto classes utilizadas para manipulação de Timeout alteraram suas assinaturas para aceitar apenas a classe Duration para definir o tempo de timeout, ao invés de utilizar um número junto com um enum de TimeUnit.


Escrito por Eduardo Santos , brasileiro em Lisboa, desenvolvedor de software fullstack em Angular e Java. Sempre aprendendo novas tecnologias e linguagens de programação diferentes. Siga-me no Twitter.