3
respostas

Ao executar teste o campo categoria apresenta erro

Ola Boa Tarde! uma Ajuda por favor!

Estou seguinte a serie de aulas sobre este assunto e estou tendo problema para o sistema selecionar a opção "Item de Colecionador" no "selector option" no html. Pois ao executar o teste a seguinte mensagem é apresentada:

Porém, estou fazendo idêntico ao exemplo da aula e com o projeto fornecido por vocês, e mesm assim não vai. Teria que utilizar o "IAction" aqui no meu ambiente será?

Message: OpenQA.Selenium.ElementNotInteractableException : element not interactable
  (Session info: chrome=75.0.3770.100)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17763 x86_64)

Meu Teste:

   [Fact]
        public void DadoLoginAdminEInformacoesValidasDeveCadastrarLeilao()
        {
            var loginPO = new LoginPO(driver);
            loginPO.Visitar();
            loginPO.PreencheFormulario("admin@example.org", "123");
            loginPO.SubmeteFormulario();

            var novoLeilaoPO = new NovoLeilaoPO(driver);
            novoLeilaoPO.Visitar();

            novoLeilaoPO.PreencherFormulario("Leilão de Coleção 1",
                                             "Lorem ipsum litora nisi faucibus commodo euismod senectus amet orci mi pellentesque aliquam, rhoncus molestie conubia cursus duis non sodales a mattis urna tortor. curae class convallis nulla lacus hac sed fermentum et interdum, consequat vestibulum rutrum hendrerit iaculis lacus volutpat pulvinar platea, sed scelerisque dapibus aenean diam tincidunt vivamus nec. litora risus pellentesque potenti porttitor consectetur hac sapien platea curabitur morbi, donec feugiat erat ornare augue condimentum curabitur viverra sollicitudin at, dapibus aliquam dui aliquet nisi ut luctus amet donec. sociosqu curae at nisl aliquam potenti odio lectus viverra vivamus ultricies, erat dapibus lacinia egestas venenatis dapibus ad aenean.",
                                             "Item de Colecionador",
                                             5000,
                                             @"C:\Users\MNZZ\Pictures\20180422_180915.jpg",
                                             DateTime.Now.AddDays(20),
                                             DateTime.Now.AddDays(30));

            //novoLeilaoPO.SelecionarOptionCategoria();


            Thread.Sleep(5000);

Meu PO "NovoLeilaoPO.cs" para analisar:

using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using System;
using System.Collections.Generic;
using System.Text;

namespace Alura.LeilaoOnline.Selenium.PageObjects
{
    public class NovoLeilaoPO
    {
        private IWebDriver driver;

        private By byInputTitulo;
        private By byInputDescricao;
        private By byInputCategoria;
        private By byInputVlorInicial;
        private By byInputImagem;
        private By byInputInicioPregao;
        private By byInputTerminoPregao;

        public NovoLeilaoPO(IWebDriver driver)
        {
            this.driver = driver;

            byInputTitulo = By.Id("Titulo");
            byInputDescricao = By.Id("Descricao");
            byInputCategoria = By.Id("Categoria");
            byInputVlorInicial = By.Id("ValorInicial");
            byInputImagem = By.Id("ArquivoImagem");
            byInputInicioPregao = By.Id("InicioPregao");
            byInputTerminoPregao = By.Id("TerminoPregao");
            //ByInputCategoriaOpt = By.CssSelector("input.select-dropdown.dropdown-trigger.valid");
            //BySelectionOption = By.CssSelector("li#select-options-2376cbb5-5117-d40f-3e2e-1a6e78dda1b01");
    }

        public void Visitar()
        {
            driver.Navigate().GoToUrl("http://localhost:5000/Leiloes/Novo");
        }

        public void PreencherFormulario(
            string titulo,
            string descricao,
            string categoria,
            double vlrInicial,
            string imagem,
            DateTime inicio,
            DateTime Termino
            )   
        {
            driver.FindElement(byInputTitulo).SendKeys(titulo);
            driver.FindElement(byInputDescricao).SendKeys(descricao);
            driver.FindElement(byInputCategoria).SendKeys(categoria);
            driver.FindElement(byInputVlorInicial).SendKeys(vlrInicial.ToString());
            driver.FindElement(byInputImagem).SendKeys(imagem);
            driver.FindElement(byInputInicioPregao).SendKeys(inicio.ToString("dd/MM/yyyy"));
            driver.FindElement(byInputTerminoPregao).SendKeys(Termino.ToString(("dd/MM/yyyy")));
        }

Obrigado!!

3 respostas

Oi Marcelo, eu resolvi o problema assim!

driver.FindElement(byInputCategoria).GetAttribute($"option[value={categoria}]");

Foi no chute porque eu pensei em elementos do HTML para selecionar o option, já que faria mais sentindo selecionar o elemento com aquele valor correspondente.

Olá Anderson, Obrigado!

Parou de dar o erro, porém a sua sugestão não seleciona a opção 2 "Item de Colecionador". Pelo que entendi este metodo "GetAttibute()" retorna o valor encontrado somente....

Pra resolver paliativamente eu fiz assim:

Criei um selector por xpath

byInputCategoriaItemColec = By.XPath("//*[contains(@class,'dropdown-content select-dropdown')]/li[2]/span");

e no teste tive que fazer assim:

driver.FindElement(By.ClassName("select-wrapper")).Click();

Thread.Sleep(1000);

driver.FindElement(byInputCategoriaItemColec).Click();

Assim funciona, porém o selector ficou amarrado a uma categoria somente.

Confesso que não me agradou, mas é o que consegui por enquanto.

Valeu!

Bacana o seu método, eu evito usar Xpath, uma porque nunca sei de onde vem o elemento, se um dia eu voltar para realizar manutenção, nunca vou saber de onde estou pegando aquele elemento se não procurar manualmente. Outra sugestão que eu poderia dar e uso com frequência desde do dia que comecei o curso foi, usar o "FindElements" no plural, ele retorna uma lista, com isso vc cria um "foreach ou for "e varre uma a um até encontrar o a tag com aquele valor em especificio.