Solucionado (ver solução)
Solucionado
(ver solução)
13
respostas

ASSERT.IsTrue

Ele está dando erro na linha do Assert. bool achouPedidoValor = driver.PageSource.Contains("100,00");

Assert.IsTrue(achouPedidoValor);

ERRO: Referencia de objeto não definida para uma instancia de objeto. O que pode ser?

13 respostas

Olá Cristiano,

esquisito, pois o erro geralmente ocorre quando você tenta invocar um método a partir de uma variável sem referência para o objeto. Mas não faria muito sentido dar este erro na linha do assert dado que ali você usa uma variável de tipo primitivo. Pode me mandar o código completo dessa classe de teste para eu dar uma olhada?

Posso sim.

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using NUnit.Framework;


namespace TesteAutomatizado.testes
{
    [TestFixture]
    class tagplus
    {
        [Test]
        public void testeinfinito()
        {

            //Realizando o login
            IWebDriver driver = new ChromeDriver();

            driver.Navigate().GoToUrl("http://app.tagplus.com.br/zerado/");
            driver.Manage().Window.Maximize();
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);

            IWebElement usuario = driver.FindElement(By.Name("usuario"));
            IWebElement senha = driver.FindElement(By.Name("senha"));
            IWebElement button = driver.FindElement(By.ClassName("button"));

            usuario.SendKeys("admin");
            senha.SendKeys("123456");

            button.Click();

 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            //Realizando teste do Pedido/Orçamento


           driver.FindElement(By.ClassName("close")).Click();
            driver.FindElement(By.ClassName("alert_counter")).Click();


            driver.FindElement(By.Id("menu_modal_trigger")).Click();

            driver.FindElement(By.XPath("//*[@id='filtro']/input")).SendKeys("Pedidos/Orçamentos"); 

            driver.FindElement(By.LinkText("Pedidos/Orçamentos")).Click(); 


            driver.SwitchTo().Frame("mainPanel_iframe");
            driver.FindElement(By.Name("add")).Click();

            driver.SwitchTo().DefaultContent();
            driver.SwitchTo().Frame("http://app.tagplus.com.br/zerado/venda/pedidos_venda/form_iframe");



            //Processo para cadastrar Produto
            driver.FindElement(By.XPath("//*[@id='produtos_item_lancamento_pv']/tbody/tr/td[1]/p/span/i")).Click();
            driver.FindElement(By.XPath("//*[@id='ui-active-menuitem']")).Click();

            driver.SwitchTo().DefaultContent();
            driver.SwitchTo().Frame("http://app.tagplus.com.br/zerado/ancoras/autosuggest_produtos_iframe");

            driver.FindElement(By.Name("produto_title")).Click();
            driver.FindElement(By.Id("produto__descricao_produto")).SendKeys("Produto Pedido/Orçamento");
            driver.FindElement(By.Id("ean")).Click();
            driver.FindElement(By.Id("produto_nota_fiscal")).Click();

            driver.FindElement(By.XPath("//*[@id='fieldset_tributacao']/p[1]/span[3]/i")).Click();


            driver.FindElement(By.XPath("//*[@id='ui-active-menuitem']")).Click();

            driver.FindElement(By.Id("valor_venda_varejo_aux")).Clear();
            driver.FindElement(By.Id("valor_venda_varejo_aux")).SendKeys("100,00");
            driver.FindElement(By.Id("produto_estoque__qtd")).SendKeys("999,00");

            driver.FindElement(By.ClassName("save_close")).Click();

            driver.SwitchTo().DefaultContent();        
            driver.SwitchTo().Frame("http://app.tagplus.com.br/zerado/venda/pedidos_venda/form_iframe");


          //Inserção do produto 

         driver.FindElement(By.XPath("/html/body/div[2]/div/form/div[2]/div[2]/div[2]/fieldset/table[1]/tbody/tr/td[1]/p/span/input[2]")).SendKeys("Produto");
         driver.FindElement(By.XPath("/html/body/div[2]/div/form/div[2]/div[2]/div[2]/fieldset/table[1]/tbody/tr/td[1]/p/ul/li[1]/a/span[2]")).Click();

         driver.FindElement(By.Id("addFormLancamento")).Click();

         driver.FindElement(By.XPath("/html/body/div[2]/div/form/div[2]/div[2]/fieldset[3]/p[1]/span[2]/i")).Click();
         driver.FindElement(By.XPath("/html/body/div[2]/div/form/div[2]/div[2]/fieldset[3]/p[1]/ul/li[1]")).Click();

         driver.FindElement(By.XPath("//*[@id='dados_parcelas_tab']")).Click();

         driver.FindElement(By.XPath("/html/body/div[2]/div/form/div[2]/div[3]/fieldset/div/table/tbody/tr/td[2]/p/span/input[2]")).SendKeys("DINHEIRO");
         driver.FindElement(By.XPath("/html/body/div[2]/div/form/div[2]/div[3]/fieldset/div/table/tbody/tr/td[2]/p/ul/li[1]")).Click();

        driver.SwitchTo().DefaultContent();        
        driver.SwitchTo().Frame("http://app.tagplus.com.br/zerado/venda/pedidos_venda/form_parcela_iframe");

         driver.FindElement(By.ClassName("save_close")).Click();

        driver.SwitchTo().DefaultContent();        
        driver.SwitchTo().Frame("http://app.tagplus.com.br/zerado/venda/pedidos_venda/form_iframe");

         driver.FindElement(By.ClassName("save_close")).Click();

      bool achouPedidoCliente = driver.PageSource.Contains("Cliente Pedido/Orçamento");
      Assert.IsTrue(achouPedidoCliente);


         //Criando segundo produto para processo de mesclagem
         driver.SwitchTo().DefaultContent();
         driver.SwitchTo().Frame("mainPanel_iframe");

         Thread.Sleep(3000);
         driver.FindElement(By.Name("add")).Click();


         driver.SwitchTo().DefaultContent();
         driver.SwitchTo().Frame("http://app.tagplus.com.br/zerado/venda/pedidos_venda/form_iframe");


         }                                

    }
}

O código está um pouco diferente da dúvida. No caso ele acusa erro nestas linha?

bool achouPedidoCliente = driver.PageSource.Contains("Cliente Pedido/Orçamento");
Assert.IsTrue(achouPedidoCliente);

Tente rodar em debug este teste e vá passando linha a linha. Uma coisa que pode estar acontecendo é que estas 2 linhas são executadas depois que você clica num link ou botão:

driver.FindElement(By.ClassName("save_close")).Click();

então pode ser que ele tenha executado o Contains antes de carregar a página. Executando com debug você conseguirá ver bem com calma o que vai acontecendo e se executando o Contains depois que a página terminar de carregar se ele passa pelo Assert.

Você fala no modo depuração do visual studio?

Esse mesmo

Mas na teoria se for isso que vc falou é só dar um Thread.Sleep, não?

Essa é a solução, a depuração seria mais para confirmar que é realmente este o problema.

É só ir colocando os break points em cada linha, né?

Estou colocando os break points, mas ele não respeita...

Puts verdade, como está rodando pelo NUnit GUI é um pouco mais chato de rodar ele em debug. Até tem este link que mostra como, mas será mais fácil você colocar o Thread.Sleep mesmo e ver se o teste funciona. Só fique atento em qual tela exatamente ele deu o erro e quando ele ocorreu para ver se é realmente o problema de ele talvez fazer o Contains antes da tela terminar de carregar.

Acho que não é isso viu, Lucas. Adicionei o Thread e nada.

solução!

Pode ser que o Thread.Sleep não esteja dando tempo suficiente. No caso do Selenium, nestes casos em que precisamos esperar uma página carregar é mais recomendado usar o WebDriverWait apresentado na aula 6. E ele será mais legal pois se realmente a página não carregar no tempo esperado pelo wait, ele te apresentará um erro mais bonito falando que estourou o tempo necessário para carregar a página.