2017-02-14 1 views
1

Je fais un projet d'automatisation en utilisant selenium webdriver et C#.Cliquez sur la case à cocher dynamique avec le même sélénium de classe

Maintenant j'ai un défi à résoudre: mon système est un système pour payer des tickets, et chaque ticket est dynamique dans la page avec ses composants, pour payer il faut cliquer dans une case dynamique (chaque ticket a la case à cocher) . Ci-dessous, a un exemple avec quelques billets pour payer:

<form action="/PagamentoOnline/fix_3001837_conexaoCore/Pagamento/FormaPagamento" id="frmDebitos" method="post"><input data-val="true" data-val-required="The TipoPagamento field is required." id="TipoPagamento" name="TipoPagamento" type="hidden" value="0" /> <div class="row"> 
    <div class="col-md-6 txt-gray txt-right"><input data-val="true" data-val-required="The TipoSolicitacaoPagamento field is required." id="TipoSolicitacaoPagamento" name="TipoSolicitacaoPagamento" type="hidden" value="Pagamento" /></div> 
    <div class="col-md-3 txt-gray txt-right"> 
     <input id="DataPagamento" name="DataPagamento" type="hidden" value="2017-02-13"> 
     <span class="huge">13/02/2017</span> 
     <br /> 
     <span class="medium">Data de pagamento</span> 
    </div> 
    <div class="col-md-3 txt-gray txt-right"> 
     <span class="huge total-debitos-selecionados"></span> 
     <br /> 
     <span class="medium">Total de débitos</span> 
    </div> 
</div> 
<hr /> 
<div class="row"> 
     <div class="col-md-4 col-debito"> 
      <input class="chk-debitos-selecionados" id="DebitosSelecionados_0_" name="DebitosSelecionados[0]" type="checkbox" value="29133609" /><input name="DebitosSelecionados[0]" type="hidden" value="false" /> 
      <div class="panel panel-gray" 
       data-codigo-titulo="29133609" 
       data-valor-pagar="21.41" 
       data-valor-original="20" 
       data-data-vencimento="Venc.: 15/12/2016" 
       data-numero-parcela="1" 
       data-descricao-tipo-debito="Parcela" 
       data-sigla-periodo-letivo="2016/2"> 
       <div class="panel-heading"> 
        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="medium pull-right"><i class="glyphicon glyphicon-unchecked"></i></div> 
          <div class="huge pull-left" data-bind="text: valor">R$ 21,41</div> 
         </div> 
        </div> 
        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="pull-left">Valor Atualizado</div> 
          <div class="pull-right">1&#170; Parcela - 2016/2</div> 
         </div> 
        </div> 
       </div> 
       <div class="panel-footer"> 
        <span class="pull-left">D&#233;bito: R$ 20,00</span> 
        <span class="pull-right">Venc.: 15/12/2016</span> 
        <div class="clearfix"></div> 
       </div> 
      </div> 
     </div> 
     <div class="col-md-4 col-debito"> 
      <input class="chk-debitos-selecionados" id="DebitosSelecionados_1_" name="DebitosSelecionados[1]" type="checkbox" value="29608740" /><input name="DebitosSelecionados[1]" type="hidden" value="false" /> 
      <div class="panel panel-gray" 
       data-codigo-titulo="29608740" 
       data-valor-pagar="21.43" 
       data-valor-original="20.99" 
       data-data-vencimento="Venc.: 19/01/2017" 
       data-numero-parcela="1" 
       data-descricao-tipo-debito="Parcela" 
       data-sigla-periodo-letivo="2016/2"> 
       <div class="panel-heading"> 
        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="medium pull-right"><i class="glyphicon glyphicon-unchecked"></i></div> 
          <div class="huge pull-left" data-bind="text: valor">R$ 21,43</div> 
         </div> 
        </div> 
        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="pull-left">Valor Atualizado</div> 
          <div class="pull-right">1&#170; Parcela - 2016/2</div> 
         </div> 
        </div> 
       </div> 
       <div class="panel-footer"> 
        <span class="pull-left">D&#233;bito: R$ 20,99</span> 
        <span class="pull-right">Venc.: 19/01/2017</span> 
        <div class="clearfix"></div> 
       </div> 
      </div> 
     </div> 
     <div class="col-md-4 col-debito"> 
      <input class="chk-debitos-selecionados" id="DebitosSelecionados_2_" name="DebitosSelecionados[2]" type="checkbox" value="29675826" /><input name="DebitosSelecionados[2]" type="hidden" value="false" /> 
      <div class="panel panel-gray" 
       data-codigo-titulo="29675826" 
       data-valor-pagar="1210.42" 
       data-valor-original="1180.95" 
       data-data-vencimento="Venc.: 07/02/2017" 
       data-numero-parcela="2" 
       data-descricao-tipo-debito="Parcela" 
       data-sigla-periodo-letivo="2017/1"> 
       <div class="panel-heading"> 
        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="medium pull-right"><i class="glyphicon glyphicon-unchecked"></i></div> 
          <div class="huge pull-left" data-bind="text: valor">R$ 1.210,42</div> 
         </div> 
        </div> 
        <div class="row"> 
         <div class="col-xs-12"> 
          <div class="pull-left">Valor Atualizado</div> 
          <div class="pull-right">2&#170; Parcela - 2017/1</div> 
         </div> 
        </div> 
       </div> 
       <div class="panel-footer"> 
        <span class="pull-left">D&#233;bito: R$ 1.180,95</span> 
        <span class="pull-right">Venc.: 07/02/2017</span> 
        <div class="clearfix"></div> 
       </div> 
      </div> 
     </div> 
</div> 
<hr /> 
<div class="row"> 
    <div class="col-md-7"></div> 
     <div class="col-md-2 top-right"> 
     </div> 
    <div class="col-md-1"></div> 
    <div class="col-md-2 top-right"> 
     <button id="PagamentoCredito" type="submit" class="btn btn-success">Pagar com cartão de credito</button> 
    </div> 
</div> 

Chaque div class:

<div class="col-md-4 col-debito"> 

est un billet à payer. je dois choisir un de ces billets et cochez la case

<i class="glyphicon glyphicon-unchecked"></i> 

I tryed utiliser une boucle foreach pour sélectionner une case à cocher especified d'un billet:

ticketToPay = "cod_ticket_to_pay"; 
ReadOnlyCollection<IWebElement> ticketsInSystem= driver.FindElements(By.XPath("//div[@class='panel panel-gray']")); 


foreach (IWebElement ticketInformation in ticketsInSystem) 
{ 
if (ticketInformation.GetAttribute("data-codigo-titulo").Equals(ticketToPay)) 
    { 
IWebElement checkBoxTicket = ticketInformation.FindElement(By.XPath("//*[@class='glyphicon glyphicon-unchecked']")); 
checkBoxTicket .Click(); 
} 
} 

Mais lorsque l'action de l'élément checkboxTicket est cliqué dans le premier élément de son type, pas dans le bon ticket. Quelqu'un sait comment résoudre cela?

Un billet - une case à cocher et billets sélectionnés - case selectecd à cliquer.

+0

Quel est le problème avec cette ligne 'driver.FindElements (By.CssSelector ("entrée [valeur = ' "+ ticketToPay +"']")). Cliquez()' ... parce que ce atttribute ' La valeur de data-codigo-titulo' est la même que l'attribut de valeur de checkbox ... –

Répondre

0

Je n'ai aucune idée sur la façon de le faire avec C#. Mais en utilisant le langage Java, vous pouvez le faire de cette façon.

WebElement check1 = driver.findElement(By.xpath("//input[@value='29133609']")); 
WebElement check2 = driver.findElement(By.xpath("//input[@value='29608740']")); 
WebElement check3 = driver.findElement(By.xpath("//input[@value='29675826']")); 

int[] check_values = new int[] {29133609, 29608740, 29675826}; 

for(int i =0; i<check_values.length; i++) 
{ 
    WebElement check_source = driver.findElement(By.xpath("//input[@value='"+check_values[i]+"']")); 
    if(!check_source.isSelected()) 
    { 
     check_source.click(); 
     Thread.sleep(2500); 
    } 
}