Selenium WebDriver — Kotlin Aula 01

Reinaldo Mateus Rossetti Junior
3 min readDec 13, 2021

Estou Criando essas vídeos Aulas porque estou usando Kotlin na minha empresa atual na PayGo pertence ao grupo C6 bank, e tem sido uma ótima experiência.

Os QAs gostaram bastante de usar Kotlin e todas as metas de automação desse trimestre foram alcançadas. É claro que alguns projetos podem seguir a linguagem da Squad e nos testes de API o QA pode fazer no Postman\Newman para ganhar velocidade. A ideia aqui é compartilhar conhecimento na linguagem Kotlin, e treinar as pessoas iniciantes para o mercado.

Projeto: https://github.com/reinaldorossetti/treinamento_selenium_kotlin

** Nossa primeira aula esta no branch aula01.

Vantagens Kotlin vs Java:

  • Não precisa de ponto e vírgula em toda linha de código;
  • Classe data class simplifica o uso de gets e sets;
  • Mais consistente e menos verboso, por padrão tudo é público;
  • Pode criar funções main no próprio arquivo para testar a classe, aumentado a rapidez da execução em desenvolvimento;
  • Criação de funções com parâmetro padrão, sem precisar passar parâmetro o tempo todo;
  • Convivência com Bibliotecas\Código em Java;
  • Possui o Null safe;

Vamos falar um pouco do Básico:

Selenium WebDriver é um projeto abrangente que encapsula uma variedade de ferramentas e bibliotecas que permitem a automação do navegador da web. O Selenium fornece especificamente uma infraestrutura para a especificação W3C WebDriver — uma plataforma e interface de codificação neutra de linguagem compatível com todos os principais navegadores da Web.

https://github.com/SeleniumHQ/selenium

No link abaixo mostra a estrutura do Selenium: https://www.selenium.dev/documentation/webdriver/understanding_the_components/

Primeira Aula — Adicionando o produto ao carrinho:

Vídeo 01 — Aula Mostrando a Estrutura do nosso projeto e os comandos básicos:

Vídeo 02— Terminando nossos testes:

Vídeo 03 — Sobre Page Factory com Appium Client:

Depois vou adiciona os demais vídeos, curta pra saber que vocês gostaram e continuar o trabalho.

Site Utilizado: http://automationpractice.com/index.php

1. Configuração das bibliotecas e Estrutura do Projeto.

Maven Central e adicionamos as bibliotecas do Selenium
https://mvnrepository.com/repos/central

2. Classes

main >> nome_do_pacote >> nome_da_feature_page
Actions => Classe aonde a gente vai realizar as ações.
Screen => Classe aonde vamos mapear os elementos.
PageBase => Classe aonde vai conter funções genericas.

ShoppingCartFeature >> ShoppingCartActions >> ShoppingCartScreen >> BasePage

test >> nome_do_pacote >> carrinho_de_compra >> Vai conter as classes que faz a chamada dos nossos testes.

3. Instancia do Driver Configuração:

https://www.selenium.dev/pt-br/documentation/webdriver/capabilities/shared/

import org.openqa.selenium.*
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
class BrowserConfig(){
fun setChrome(): WebDriver {
val chromeOptions = ChromeOptions().apply {
this.setPageLoadStrategy(PageLoadStrategy.NORMAL)
}
val driver = ChromeDriver(chromeOptions)
driver.manage().apply {
this.timeouts().implicitlyWait(Duration.ofSeconds(30))
this.timeouts().pageLoadTimeout(Duration.ofSeconds(30))
this.window().maximize()
}
return driver
}
}

https://www.selenium.dev/documentation/webdriver/browser_manipulation/
https://www.selenium.dev/documentation/support_packages/working_with_select_elements/

4. Mapeamos o elemento e fazemos as funções, o padrão geralmente utilizando no Kotlin\Java é usando o By.

Deixei um padrão para o elemento, pois é sempre complicado dar nome as coisas: elem => Define o que um elemento e quando digitar elem vai listar todos os elementos. Tipo de Elemento => Define o tipo do elemento Link, Button (Btn), Span. Nome que simboliza o que o elemento faz.

val elemInputSearch: By = By.id("search_query_top")
val elemBtnSearch: By = By.cssSelector("button[name=\"submit_search\"]")
val elemLinkAddToCard: By = By.cssSelector("a[title=\"Printed Summer Dress\"]")
val elemBtnCheckout: By = By.cssSelector("form[id=\"buy_block\"] button[name=\"Submit\"] span")
val elemLinkAddToCheckout: By = By.cssSelector("a[title=\"Proceed to checkout\"]")
val elemSpanProductsQuantity: By = By.cssSelector("#cart_title span[id=summary_products_quantity]")

Page factory https://github.com/SeleniumHQ/selenium/wiki/PageFactory

@FindBy(id = "search_query_top")
lateinit var elemBtnSearch: WebElement
@FindBy(name = "submit_search")
lateinit var elemBtnSearch: WebElement
@FindBy(css = "a[title=\"Printed Summer Dress\"]")
lateinit var elemLinkAddToCard: WebElement
@FindBy(css = "form[id=\"buy_block\"] button[name=\"Submit\"] span")
lateinit var elemBtnCheckout: WebElement
@FindBy(css = "a[title=\"Proceed to checkout\"]")
lateinit var elemLinkAddToCheckout: WebElement
@FindBy(css = "#cart_title span[id=summary_products_quantity]")
lateinit var elemSpanProductsQuantity: WebElement

5. Criamos as nossas chamadas dos testes utilizando o Junit.

val driver = BrowserConfig().setChrome()
val pageCart = ShoppingCartActions(driver)
val base = BasePage(driver)
@BeforeAll()
fun beforeTests(){ }
@AfterAll
fun quit() = driver.quit()
@Test
fun adicionandoProdutoAoCarrinho(){
base.visit("/")
pageCart.pesquisar("Dress")
pageCart.addToCard()
assertEquals("1 Product", pageCart.validarCarrinho())
}

Procurando um elemento: https://www.selenium.dev/documentation/webdriver/elements/

Uso do selecionar valor no combobox: https://www.selenium.dev/documentation/webdriver/elements/select_elements/

Actions para mover para o elemento: https://www.selenium.dev/documentation/webdriver/actions_api/mouse/

Espero que tenham gostado pessoal, fique ligado no próximo vídeo, e siga-me no Medium e linkedin.

--

--