Topicos Recents
-
Problemas com o nightwatch
Geral1 -
Ajuda com Curso
Geral5 -
Como você mapearia este elemento?
Geral12 -
Questionário sobre testes automatizados em aplicativos móveis
Geral4 -
A arte de desenvolver testes - Cucumber + Capybara
Artigos e Tutoriais44 -
Como abrir todos os link de uma página
Geral2 -
QA Analyst/Project Lead (Florianópolis/Remote)
Vagas1 -
QA Engineer - (Pinheiro)
Vagas1 -
Teste de Stress
Geral5 -
Tester que não programa, leia isso por favor.
Artigos e Tutoriais6 -
Executar tags em features diferentes no Cucumber
Geral1 -
QA, trate sua automação como software
Artigos e Tutoriais5 -
[Survey] - Testes automatizados em aplicativos móveis
Geral6 -
Cucumber para javascript Duvida
Artigos e Tutoriais2 -
Vagas QA PL e Sr - São Paulo
Vagas1 -
Episode 010 - The Automate or Die Special - The Evil Tester Show
Feed de Blogs e Posts2 -
Ruby In Tests
Artigos e Tutoriais7 -
Livros
Geral19 -
Anexar printscreen ao Allure Report
Geral28 -
Vaga para Analistas de Testes Pleno.
Vagas1
Selenium WebDriver C# - método [TestCaseSource] não encontrado após build
-
Pessoal, quando faço o build do script abaixo, não retorna nenhum erro; no entanto, o build não localiza o método de teste
[TestCaseSource]
, e não consigo executá-lo. Ocorre a seguinte mensagem:System.Exception : The test case source could not be found.
Meu script é orientado a objetos: chama a classe
massaBase
, a qual lê os dados de um arquivo .txt para fazer inputs e verificações no sistema.Detalhe: quando eu declaro tudo dentro da classe
massaBase
no meu main script (ou seja, não faço a OO), funciona.O que pode estar faltando?
main script:
using System; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Drawing.Imaging; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Support.UI; using OpenQA.Selenium.Chrome; using System.IO; using System.Collections; using tiraScreenshot.PageObjects; using navegador.PageObjects; using testePositivo.PageObjects; using testeNegativo.PageObjects; using sessao.PageObjects; using massa.PageObjects; namespace SeleniumTests { [TestFixture] public class Login { IWebDriver driver = null; public capturaImagem tiraScreenshot; public acessaSite navegador; public LoginPositivo testePositivo; public LoginNegativo testeNegativo; public sair sessao; public massaBase massa; public Login() { ChromeOptions options = new ChromeOptions(); options.AddArguments("--disable-infobars"); options.AddArguments("start-maximized"); driver = new ChromeDriver(options); tiraScreenshot = new capturaImagem(driver); navegador = new acessaSite(driver); testePositivo = new LoginPositivo(driver); testeNegativo = new LoginNegativo(driver); sessao = new sair(driver); massa = new massaBase(driver); } [Test] [TestCaseSource(typeof(massaBase.DadosTXT), "ArquivoTXT")] public void AutomacaoLogin(massaBase.DadosTXT coluna) { AutomacaoLogin(coluna.usuarioLogin, coluna.senhaLogin, coluna.usuarioInvalido, coluna.senhaInvalida); } public void AutomacaoLogin(string usuarioLogin, string senhaLogin, string usuarioInvalido, string senhaInvalida) { navegador.acessaURL(); testePositivo.UsuarioSenhaValidos(usuarioLogin, senhaLogin); sessao.FazLogoff(); testeNegativo.CamposEmBranco(); testeNegativo.UsuarioInvalido(usuarioInvalido, senhaLogin); testeNegativo.SenhaInvalida(usuarioLogin, senhaInvalida); } } }
massaBase.cs:
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Remote; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Text.RegularExpressions; using System.Drawing.Imaging; using NUnit.Framework; using OpenQA.Selenium.Support.UI; using System.IO; namespace massa.PageObjects { public class massaBase { public IWebDriver driver; public massaBase(IWebDriver driver) { this.driver = driver; } public class DadosTXT { public string usuarioLogin { get; set; } public string senhaLogin { get; set; } public string usuarioInvalido { get; set; } public string senhaInvalida { get; set; } } public static IEnumerable ArquivoTXT { get { string linha; using (FileStream lerArquivo = new FileStream(@"C:\Users\cciola\Documents\Visual Studio 2013\Projects\Login\massaBase.txt", FileMode.Open, FileAccess.Read)) { StreamReader leitor = new StreamReader(lerArquivo); while ((linha = leitor.ReadLine()) != null) { var coluna = linha.Split(';'); yield return new DadosTXT { usuarioLogin = coluna[0], senhaLogin = coluna[1], usuarioInvalido = coluna[2], senhaInvalida = coluna[3] }; } leitor.Close(); lerArquivo.Close(); } } } } }
Arquivo massaBase.txt:
[email protected];1234;xxxx;1111;
[]s
-
Alguém??
-
Oi @CarolCiola,
Vi que você instancia o objeto
massa
, mas não utiliza o objeto e sim a classe:[TestCaseSource(typeof(massaBase.DadosTXT), "ArquivoTXT")] public void AutomacaoLogin(massaBase.DadosTXT coluna)
Será que tem alguma relação? Já tentou utilizar da seguinte forma:
[TestCaseSource(typeof(massaBase.DadosTXT), "ArquivoTXT")] // chamar o massa declarado no topo do codigo e instanciado // no construtor da classe Login public void AutomacaoLogin(massa.DadosTXT coluna)
-
Eu fiquei com uma dúvida, por que tem “referencia” do Webdriver na classe de criação de “massa de dados”?
Né…não consegui ligar a interação do webdriver naquela classe…sendo que ela só fornecesse dados… -
Oi @samuellucas, fiz o que você sugeriu, mas não funcionou:
-
Oi @ramses-saccol-de-almeida, me desculpe, não entendi bem seu questionamento. Você se refere ao trecho do construtor?
Por favor, pode tentar explicar sua pergunta de outra forma? Tnks!
-
É exatamente isso. Essa classe serve apenas para geração de massa de dados, porque existe um construtor (ou qualquer referência) nela do webdriver? Tu pega algo (ou cria algo) usando ela? O erro não pode ser por talvez tu ter o construtor do webdriver ali, e ele não faz nada? (visto que, pelo que me parece, tu não passa nada de objetos do webdriver)
-
@ramses-saccol-de-almeida Entendi! E sim, realmente não fazia sentido, não tinha percebido.
Mas veja, mesmo removendo a parte do construtor e consequentemente a instância, ainda obtive o mesmo erro:
-
Tá…isso o que vou falar é um chute, mas né…
Já pensou em pegar tudo que está declarado
AutomacaoLogin(string usuarioLogin....)
E deixar no
```AutomacaoLogin(massaBase.DadosTXT coluna)````
?
Agora, me pareceu que ele tentou executar um e não achou nada para fazer…
O que pensei é[Test] [TestCaseSource(typeof(massaBase.DadosTXT), "ArquivoTXT")] public void AutomacaoLogin(massaBase.DadosTXT coluna) { navegador.acessaURL(); testePositivo.UsuarioSenhaValidos(usuarioLogin, senhaLogin); sessao.FazLogoff(); testeNegativo.CamposEmBranco(); testeNegativo.UsuarioInvalido(usuarioInvalido, senhaLogin); testeNegativo.SenhaInvalida(usuarioLogin, senhaInvalida); } }
Claro, tu precisaria dar uma ajusta nisso.
Como falei, é um chute, mas me parece que ele só tenta executar opublic void AutomacaoLogin(massaBase.DadosTXT coluna)
E não acha nada para fazer…
Tu tinha comentado que quando tu declarava tudo dentro da classe masasBase, funcionava… Pode mostrar um exemplo disso? -
@ramses-saccol-de-almeida Claro, segue exemplo de um script que funciona de ponta a ponta:
main script:
using System; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Drawing.Imaging; using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Support.UI; using OpenQA.Selenium.Chrome; using System.IO; using System.Collections; using tiraScreenshot.PageObjects; using navegador.PageObjects; using sessao.PageObjects; using login.PageObjects; using cadastra.PageObjects; using edita.PageObjects; using inativa.PageObjects; namespace SeleniumTests { [TestFixture] public class Categoria { IWebDriver driver = null; public capturaImagem tiraScreenshot; public acessaSite navegador; public Login login; public sair sessao; public cadastraCategoria cadastra; public editaCategoria edita; public inativaCategoria inativa; public Categoria() { ChromeOptions options = new ChromeOptions(); options.AddArguments("--disable-infobars"); options.AddArguments("start-maximized"); driver = new ChromeDriver(options); tiraScreenshot = new capturaImagem(driver); navegador = new acessaSite(driver); login = new Login(driver); sessao = new sair(driver); cadastra = new cadastraCategoria(driver); edita = new editaCategoria(driver); inativa = new inativaCategoria(driver); } public class DadosTXT { public string usuarioLogin { get; set; } public string senhaLogin { get; set; } public string categoria { get; set; } public string ordemCategoria { get; set; } public string categoriaEdicao { get; set; } public string ordemCategoriaEdicao { get; set; } } public static IEnumerable ArquivoTXT { get { string linha; using (FileStream lerArquivo = new FileStream(@"C:\Users\cciola\Documents\Visual Studio 2013\Projects\Categorias\massaBase.txt", FileMode.Open, FileAccess.Read)) { StreamReader leitor = new StreamReader(lerArquivo); while ((linha = leitor.ReadLine()) != null) { var coluna = linha.Split(';'); yield return new DadosTXT { usuarioLogin = coluna[0], senhaLogin = coluna[1], categoria = coluna[2], ordemCategoria = coluna[3], categoriaEdicao = coluna[4], ordemCategoriaEdicao = coluna[5] }; } leitor.Close(); lerArquivo.Close(); } } } [Test] [TestCaseSource("ArquivoTXT")] public void AutomacaoCategorias(DadosTXT coluna) { AutomacaoCategorias(coluna.usuarioLogin, coluna.senhaLogin, coluna.categoria, coluna.ordemCategoria, coluna.categoriaEdicao, coluna.ordemCategoriaEdicao); } public void AutomacaoCategorias(string usuarioLogin, string senhaLogin, string categoria, string ordemCategoria, string categoriaEdicao, string ordemCategoriaEdicao) { navegador.acessaURL(); login.fazLogin(usuarioLogin, senhaLogin); cadastra.acessaMenu(); cadastra.cadastrar(categoria, ordemCategoria); edita.editar(categoria, ordemCategoria, categoriaEdicao, ordemCategoriaEdicao); inativa.inativar(categoriaEdicao); sessao.FazLogoff(); } } }
Este script chama as classes abaixo, mas não é relevante descrevê-las aqui:
using tiraScreenshot.PageObjects; using navegador.PageObjects; using sessao.PageObjects; using login.PageObjects; using cadastra.PageObjects; using edita.PageObjects; using inativa.PageObjects;
-
@ramses-saccol-de-almeida said in Selenium WebDriver C# - método [TestCaseSource] não encontrado após build:
Tá…isso o que vou falar é um chute, mas né…
Já pensou em pegar tudo que está declarado
AutomacaoLogin(string usuarioLogin....)
E deixar no
```AutomacaoLogin(massaBase.DadosTXT coluna)````
?Quanto a esse chute, errou o gol haha! Fiz mas não deu certo…
-
Olhando o teu código, esse último, notei que tu passa só os métodos…
Será que ajustando assim:[Test] [TestCaseSource(typeof(massaBase), "ArquivoTXT")] public void AutomacaoCategorias(DadosTXT coluna)
ou
[TestCaseSource(typeof(massaBase), "ArquivoTXT")] public void AutomacaoLogin(massaBase.DadosTXT coluna)
Não poderia resolver? por que no “typeof” tu só precisa informar o tipo né (que pode ser uma classe ou pode ser classe.método???)
Pelo que notei, se tu indica massBase.DadosTXT, ele está procurando o ArquivoTXT dentro desse método, e não vai achar nada… (pois ele está fora…)
(ps: Eu nunca usei o que está usando, estou só chutando usando um pouco de lógica…)
Faz algum sentido??? -
@ramses-saccol-de-almeida Fez sentido totalmente, e… funcionou!! \o/
A indicação de classe.método, no caso
massBase.DadosTXT
, estava mesmo por procurar oArquivoTXT
.Muitíssimo obrigada pela ajuda de todos!!
-
Beleza…Me deve uma cerveja (artesanal)
aueuaehuauhaeuhuhuheuhaeuhae
Mas beleza…bons testes…