Baseado nos posts do Jonas e do Marcelo com ajuda do Anderson, criei a seguinte solução para o problema de não conseguir selecionar a categoria:
Busquei o iput de categoria por uma de suas classes: byInputCategoria = By.ClassName("select-dropdown");
Depois busquei todos os spans da página já que o texto ''Item de Colecionador" se encontra dentro de uma span: bytSpanCaterorias = By.TagName("span");
Ao preencher o formulário, primeiro fiz a ação do click no input de categoria: driver.FindElement(byInputCategoria).Click();
, depois busquei em todos os span por qual possuia o texto do parâmetro 'categoria' e realizei um novo click: var categorias = driver.FindElements(bytSpanCaterorias); foreach ( var span in categorias ) { if( span.Text == categoria ) span.Click();
Código completo:
using OpenQA.Selenium;
using System;
namespace Alura.LeilaoOnline.Selenium.PageObjects
{
public class NovoLeilaoPO
{
private IWebDriver driver;
private By byInputTitulo;
private By byInputDescricao;
private By byInputCategoria;
private By bytSpanCaterorias;
private By byInputValorInicial;
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.ClassName("select-dropdown");
bytSpanCaterorias = By.TagName("span");
byInputValorInicial = By.Id("ValorInicial");
byInputImagem = By.Id("ArquivoImagem");
byInputInicioPregao = By.Id("InicioPregao");
byInputTerminoPregao = By.Id("TerminoPregao");
}
public void Visitar()
{
driver.Navigate().GoToUrl("https://localhost:5001/Leiloes/Novo");
}
public void PreencheFormulario(
string titulo,
string descricao,
string categoria,
double valor,
string imagem,
DateTime inicio,
DateTime termino
)
{
driver.FindElement(byInputTitulo).SendKeys(titulo);
driver.FindElement(byInputDescricao).SendKeys(descricao);
driver.FindElement(byInputCategoria).Click();
var categorias = driver.FindElements(bytSpanCaterorias);
foreach ( var span in categorias ) {
if( span.Text == categoria ) span.Click();
}
driver.FindElement(byInputValorInicial).SendKeys(valor.ToString());
driver.FindElement(byInputImagem).SendKeys(imagem);
driver.FindElement(byInputInicioPregao).SendKeys(inicio.ToString("dd/MM/yyyy"));
driver.FindElement(byInputTerminoPregao).SendKeys(termino.ToString("dd/MM/yyyy"));
}
}
}