Página 1 de 1

IE Controls - Botão só habilita quando seleciona item numa lista

Enviado: Dom Abr 28, 2019 11:39 pm
por jorrobeh
Boa noite amigos,
Sou novo no fórum, mas pesquisei antes de criar esse tópico e não achei nada a respeito.
Preciso automatizar uma rotina para marcar uma venda como entregue em um e-shop, porém para concluir a ação, preciso clicar em um botão 'Enviar' que só é habilitado depois que seleciono um item na lista, que no caso, é o item 'Pedido entregue'.
Quando faço isso manualmente, funciona certinho. Mas fazendo scraping via IE Controls, o botão não habilita depois que seleciono o item com:

.Document.all("situacao_id").SelectedIndex = 4

Em anexo está o código da página com o select e o botão que preciso usar.
Agradeço a ajuda!

Código: Selecionar todos

      <div class="box-content">
        <div class="row">
          <div class="col-md-9 col-sm-8">
            <div class="custom-box">
              <form id="frm-alterar-situacao" class="form-inline form-default" method="post" action="//app.lojaintegrada.com.br/painel/pedido/1630/alterar_situacao">
                <input id="situacao-mensagem" name="mensagem" value="" type="hidden">
                <div class="form-group">
                  <label class="control-label" for="situacao_id">Situação do pedido:</label>
                  <select id="situacao_id" class="form-control" name="situacao_id">
                    
                      <option style="background-color: rgb(199, 227, 255);" value="8" data-notificar="True">Pedido Cancelado</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" value="9" data-notificar="False">Pedido Efetuado</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" value="14" data-notificar="True">Pedido Entregue</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" value="11" data-notificar="True">Pedido Enviado</option>
                    
                      <option style="background-color: rgb(199, 227, 255);" selected="selected" value="4" data-notificar="True">Pedido Pago</option>
                    
                      <option style="background-color: rgb(216, 236, 255);" value="17" data-notificar="True">Em produção</option>
                    
                      <option style="background-color: rgb(216, 236, 255);" value="15" data-notificar="True">Pedido em separação</option>
                    
                      <option style="background-color: rgb(216, 236, 255);" value="13" data-notificar="True">Pedido pronto para retirada</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="2" data-notificar="True">Aguardando pagamento</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="7" data-notificar="True">Pagamento devolvido</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="3" data-notificar="True">Pagamento em análise</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="16" data-notificar="False">Pagamento em chargeback</option>
                    
                      <option style="background-color: rgb(231, 243, 254);" value="6" data-notificar="False">Pagamento em disputa</option>
                    
                  </select>

                    <!-- Split button -->
                    <div class="btn-group">
                      <button class="btn btn-danger btn-alterar-sem-observacao" disabled="disabled" onclick="$('#frm-alterar-situacao').submit();" type="button">Alterar</button>
                      <button aria-haspopup="true" aria-expanded="false" class="btn btn-danger dropdown-toggle" disabled="disabled" type="button" data-toggle="dropdown">
                        <span style="margin: 8px 0px;" class="caret"></span>
                        <span class="sr-only">Opções</span>
                      </button>
                      <ul class="dropdown-menu">
                        <li class="alterar-sem-observacao"><a href="javascript:;">Alterar status</a></li>
                        <li class="alterar-com-observacao"><a href="javascript:;">Alterar e enviar comentário para cliente por e-mail</a></li>
                      </ul>
                    </div>

                </div>

              </form>
              
            </div>
          </div>

Re: IE Controls - Botão só habilita quando seleciona item numa lista

Enviado: Ter Abr 30, 2019 2:18 pm
por jorrobeh
Olá pessoal.
Eu imaginei que minha dúvida seria muito especifica para conseguir um retorno rápido, então continuei pesquisando pela web, atrás de alguma solução.
Bom, por sorte ou persistência, acabei encontrando a solução num fórum gringo.
Pelo que entendi (me corrijam se eu estiver errado), a lista e o botão funcionam em cadeia, ou seja, conforme eu seleciono o item na lista, habilita o botão. E eu não estava conseguindo selecionar o item na lista via InternetControls, porque não se trata de um listbox comum, e sim de um dropdown, que envolve linguagem java para efetivar o select.

Vou deixar a solução aqui, caso alguém mais tenha essa necessidade e assim como eu, não tenha outra opção, se não o InternetControls.

Código da solução abaixo:

Código: Selecionar todos

    Dim HTMLdoc As HTMLDocument
    Dim selectElement As HTMLSelectElement
    Dim evtChange As Object
    
            Set HTMLdoc = IE.Document
            Set evtChange = HTMLdoc.createEvent("HTMLEvents")
            evtChange.initEvent "change", True, False
            Set selectElement = HTMLdoc.getElementById("situacao_id")	'dentro do parenteses vai o 'select id'
            selectElement.Value = "14" 'Pedido Entregue 			'value é o item desejado na lista
            selectElement.dispatchEvent evtChange
      .Document.GetElementsByClassName("btn-alterar-sem-observacao")(0).Click	'click do botão já habilitado
Não esqueçam de referenciar a biblioteca 'Microsoft HTML Object Library'

Espero ter ajudado de alguma forma.
Grande abraço!