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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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.
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.