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á!
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 senha
123. Submetemos esse formulário por meio de
SubmeteFormulario()`.
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.
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()
.
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:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Acesso completo
durante 1 ano
Estude 24h/dia
onde e quando quiser
Novos cursos
todas as semanas