Publicidade - Adsense

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)

  • MVP

    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:

    0_1505212699131_13ad13da-94b5-4efb-bf07-7e9a90dcb6be-image.png



  • Oi @ramses-saccol-de-almeida, me desculpe, não entendi bem seu questionamento. Você se refere ao trecho do construtor?

    0_1505212997098_33e611ce-11e4-4fbe-aa40-da4c63a27981-image.png

    Por favor, pode tentar explicar sua pergunta de outra forma? Tnks!


  • MVP

    É 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:

    0_1505218798631_a69de46f-6fae-4324-ba26-2d22f8122c2f-image.png

    0_1505218807653_19a98a26-d56c-4bff-a92d-6e3953a40fc7-image.png

    0_1505218864611_9e6dd002-5221-4891-9e08-627378c48488-image.png


  • MVP

    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 o

    public 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…


  • MVP

    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 o ArquivoTXT.

    0_1505242517815_403ff9ec-24cd-4e13-bbda-c5b6a758e2c2-image.png

    Muitíssimo obrigada pela ajuda de todos!!


  • MVP

    Beleza…Me deve uma cerveja (artesanal)
    aueuaehuauhaeuhuhuheuhaeuhae
    Mas beleza…bons testes…


 

Publicidade - Adsense

status at

9
Online

2.9k
Usuários

1.7k
Tópicos

5.7k
Posts

});