Alura > Cursos de Programação > Cursos de .NET > Conteúdos de .NET > Primeiras aulas do curso Selenium WebDriver e C# parte 2: outros recursos

Selenium WebDriver e C# parte 2: outros recursos

Elementos invisíveis - Introdução

Olá, testadores! Boas vindas à segunda parte do Curso de Selenium WebDriver. Aqui, discutiremos situações específicas que são encontradas no dia a dia e as resoluções que o Selenium nos disponibiliza.

Por exemplo, o que fazer quando elementos ficam visíveis só após ação do usuário? O que fazer quando precisamos interagir com elementos em formulários complexos?

Os formulários complexos são esses que possuem área de texto, select, input do type checkbox e input com type file. Veremos como o WebDriver lida com esses elementos.

Além disso, lideramos com casos em que o Framework, como CSS/Javascript, fazem com que os elementos desejados para o teste fiquem escondidos ou armazenados em locais diferentes, embaixo das opções de divs.

Aprenderemos o que fazer quando os asserts só são atendidos após uma certa espera. Lidaremos com tudo isso combinado ao fato de que quanto mais testes fazemos, mais complicado o código se torna. Ou seja, continuaremos nos preocupando com a organização e limpeza do código de testes. Para isso, melhoraremos nossos PageObjects.

Outra situação recorrente é que às vezes precisamos testar valores dentro de uma tabela, coluna ou linha. E sites cujos atributos de elementos são gerados dinamicamente. Por fim, verificaremos cenários que exigem configurações específicas em nosso navegador.

Sem mais delongas, vamos partir para o primeiro conteúdo da primeira aula. Espero vocês lá!

Elementos invisíveis - Fazendo logout

Vamos continuar nossos testes! Na última aula da Parte 1 do curso, testamos o Login para fixarmos o conceito de Page Object. Agora, testaremos o Logout.

Já conseguimos entrar NO Dashboard com um usuário válido. Lembrem-se que é preciso fazer o download do projeto inicial porque existem algumas diferenças deste projeto em relação ao usado na primeira parte do curso. Dentre elas, o formulário "Pesquisar Leilões" localizado canto direito da página Dashboard de pessoas interessadas no leilão.

Para o teste de Logout, vamos criar uma classe de teste com o nome "AoEfetuarLogout" do Visual Studio. Removeremos os namespaces que não estão sendo utilizados e adicionar alguns como Xunit e OpenQA.Selenium para nos adiantarmos.

using xUnit;
using OpenQA.Selenium;
using Alura.LeilaoOnline.Selenium.Testes;

namespace Alura.LeilaoOnline.Selenium.Testes
{
    class AoEfeuarLogout
    {
    }
}

Vamos aumentar a visibilidade da classe AoEfeuarLogout para public e adicionar a estrutura básica de IWebDriver guardado como private. Criaremos o constructor AoEfeuarLogout() que receberá uma TestFixture já compartilhando o contexto desse teste. Por fim, guardamos o driver que está na fixture.

Para podermos usar essa Fixture e compartilhar seu contexto, precisamos dizer que essa classe está dentro da coleção "Chrome Driver".

namespace Alura.LeilaoOnline.Selenium.Testes
{
    [Collection("Chrome Driver")]
    public class AoEfetuarLogout
    {
        private IWebDriver driver;

        public AoEfetuarLogout(TesteFixture fixture)
        {
            driver = fixture.Driver;
        }
    }
}

Essa é a estrutura básica para começarmos uma nova classe de teste. Vamos adicionar um método de teste public void com nome DadoLoginValidoDeveIrParaHomeNaoLogada().

[Fact]
public void DadoLoginValidoDeveIrParaHomeNaoLogada()
{

}

Para esse Login, criaremos o seu Page Object, loginPO. Nele, passaremos o driver como argumento. Em seguida, vamos Visitar(), preenchemos o formulário PreencherFormulario() com o login `fulano@example.orge senha123. Submetemos esse formulário por meio deSubmeteFormulario()`.

var loginPO = new LoginPO(driver);
loginPO.Visitar();
loginPO.PreencherFormulario("fulano@example.org", "123");
loginPO.SubmeteFormulario();

Navegamos para a página de Login, preenchemos e submetemos o formulário e agora já devemos estar na página de Dashboard. O próximo passo é deslogarmos dela.

Para isso, nosso assert será Assert.Contains("Próximos Leilões", driver.PageSource) pois sabemos que "Próximos Leilões" é um dos elementos que temos na página não-logada.

Criamos o teste, mas ainda não temos o Page Object do Dashboard de interessados e é isso que faremos no próximo vídeo.

Elementos invisíveis - Page Object do Dashboard

Agora criaremos o Page Object da Dashboard de interessados. Afinal, queremos criar um objeto dashboardPO igual a new DashboardInteressadaPO() passando o driver como argumento de entrada.

var dashboardPO = new DashboardInteressadaPO(driver);

Em seguida criaremos uma classe que tenha esse mesmo nome em "PageObject > Adicionar > Classe". Vamos deixar a visibilidade como pública. Importaremos o namespace do Selenium para poder receber o IWebDriver. E usaremos o Visual Studio para gerar os construtor que injete o WebDriver.

using OpenQA.Selenium;


namespace Alura.LeilaoOnline.Selenium.PageObjects
{
    public class DashboardInteressadaPO
    {
        private IWebDriver driver;

        public DashboardInteressadoPO(IWebDriver driver)
        {
            this.driver = driver;
        }
    }
}

De volta a "AoEfetuarLogouts" a action será dashboardPO.EfetuarLogout(). Esse método precisa ser criado em "DashboardInteressadaPO". Criarmos ele como um método público.

public void EfetuarLogout()
{

}

Sempre que vocês forem mapear o PO, é preciso analisar o HTML com calma. Neste caso, queremos capturar o link de "Logout" da página de interessados. Portanto, voltamos a ela e em "Logout" clicamos com o botão direito do mouse, uma lista de ações se abrirá e selecionaremos o último item que é "Inspecionar". Ao fazer isso, teremos acesso ao id desse link, que nesse caso élogout.

Voltando ao Visual Studio, em "DashboardInteressadaPO", vamos criar um locator private da classe By para o byLogoutLink.

private By byLogoutLink;

No construtor, inicializaremos o byLogoutLink usando o By.id() recebendo o logout, que encontramos no "Inspecionar" o HTML.

public DashboardInteressadoPO(IWebDriver driver)
{
    this.driver = driver;
    byLogoutLink = By.id("logout")

Em public void EfetuarLogout() vamos sar o driver.finElement() recebendo o byLogoutLink e .Click().

public void EfetuarLogout() 
{
    driver.FindElement(byLogoutLind).Click()
}

Clicamos no link de logout e depois em "AoEfetuarLogout" verificamos se estamos na Home não logada pelo assert.

Assert.Contains("Próximos Leilões, driverPageSource);

Podemos testar esse código, clicando em DadoLoginValidoDeveIrParaHomeNaoLogada() com o botão direito do mouse e selecionar "Executar teste". O teste é executado, mas "AoEfetuarLogout" deu problema. porque não foi possível interagir com o elemento da linha driver.FindElement(byLogoutLind).Click().

Esse elemento não está visível, o que é um problema comum de encontrar quando trabalhamos com Selenium WebDriver. Quando isso acontece, não conseguimos trabalhar com o FindElemente().

Sobre o curso Selenium WebDriver e C# parte 2: outros recursos

O curso Selenium WebDriver e C# parte 2: outros recursos possui 184 minutos de vídeos, em um total de 61 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda .NET acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas