Publicidade - Adsense

Não consigo automatizar o clique do comando - Webdriver Ruby - Cucumber



  • Estou aprendendo automatização usando o framework webdriver a linguagem estou utilizando o Ruby.
    Quando inspecionei o código do botão “Save” foi exibido:

    <input title="Save" accesskey="a" class="button primary" onclick="var _form = document.getElementById('EditView'); _form.action.value='Save'; if(check_form('EditView'))SUGAR.ajaxUI.submitForm(_form);return false;" type="submit" name="button" value="Save" id="SAVE">
    
    <input title="Save" accesskey="a" class="button primary" onclick="var _form = document.getElementById('EditView'); _form.action.value='Save'; if(check_form('EditView'))SUGAR.ajaxUI.submitForm(_form);return false;" type="submit" name="button" value="Save" id="SAVE">
    

    A step_definitions:

    Quando(/^clicar o botão "([^"]*)"$/) do |botaoSave|
    @navegador.find_element(:xpath, "//*[@id='SAVE']").click
    #@navegador.find_element(:id, 'SAVE')
    end
    

    Conseguir realizar todos os passos gera uma mensagem de erro quando automatizo o click.

    E clicar o botão "SAVE"                                  # features/step_definitions/criarConta.rb:91
      unknown error: Element <input title="Save" accesskey="a" class="button primary" onclick="var _form = document.getElementById('EditView'); _form.action.value='Save'; if(check_form('EditView'))SUGAR.ajaxUI.submitForm(_form);return false;" type="submit" name="button" value="Save" id="SAVE"> is not clickable at point (287, 20). Other element would receive the click: <a href="#" id="grouptab_1" class="dropdown-toggle grouptab" data-toggle="dropdown">...</a>
        (Session info: chrome=60.0.3112.101)
        (Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 4.10.0-33-generic x86_64) (Selenium::WebDriver::Error::UnknownError)
      ./features/step_definitions/criarConta.rb:92:in `/^clicar o botão "([^"]*)"$/'
      features/criarConta.feature:30:in `E clicar o botão "SAVE"'
    

    Por que isso está acontecendo? Ou estou esquecendo algo? Qualquer ajuda é apreciada.



  • Vc duplicou o elemento da tela (com id = SAVE) ou é assim mesmo?

    parece que vc ta querendo clicar em algum lugar não disponível na hora do click… ou algum elemento que está sobreescrevendo ele…
    Faz tempo que não uso ruby… calma que jaja alguem aparece pra ajudar :)



  • Realmente ficou duplicado. Falha minha. Alterei a step_definitions para:

    Quando(/^clicar o botão “([^”])"$/) do |botaoSave|
    @navegador.find_element(:xpath, "//
    [@title=‘Save’]").click
    end

    Mensagem exibida foi a seguinte:

    E clicar o botão “SAVE” # features/step_definitions/criarConta.rb:91
    unknown error: Element <input title=“Save” accesskey=“a” class=“button primary” onclick=“var _form = document.getElementById(‘EditView’); _form.action.value=‘Save’; if(check_form(‘EditView’))SUGAR.ajaxUI.submitForm(_form);return false;” type=“submit” name=“button” value=“Save” id=“SAVE”> is not clickable at point (287, 20). Other element would receive the click: <a href="#" id=“grouptab_1” class=“dropdown-toggle grouptab” data-toggle=“dropdown”>…</a>
    (Session info: chrome=60.0.3112.101)
    (Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 4.10.0-33-generic x86_64) (Selenium::WebDriver::Error::UnknownError)
    ./features/step_definitions/criarConta.rb:92:in /^clicar o botão "([^"]*)"$/' features/criarConta.feature:30:inE clicar o botão “SAVE”'
    Então a conta será cadastrada corretamente # features/criarConta.feature:31



  • @davidson-jacob

    Parece que esse elemento
    <a href="#" id=“grouptab_1” class=“dropdown-toggle grouptab” data-toggle=“dropdown”>…</a>
    ta na frente do elemento que vc quer clicar… talvez seja o tamanho da tela que ta fazendo ele ficar na frente, ou realmente tem outro elemento na frente. Da uma inspecionada no html pra ver oque ta acontecendo



  • Valeu pelas dicas, mas ainda não conseguir descobrir qual problema que está rolando.



  • Na tela existem dois botões para salvar. O código é mesmo. Isto seria uma problema para localizar o botão?



  • @davidson-jacob said in Não consigo automatizar o clique do comando - Webdriver Ruby - Cucumber:

    Na tela existem dois botões para salvar. O código é mesmo. Isto seria uma problema para localizar o botão?

    Ambos possuem o mesmo ID?



  • na verdade é isso o que o erro está dizendo… que foi feito o trigger em outro lugar. (algo com mesmo id)

    o codigo geralmente é lido de cima para baixo… ou seja… se o id que vc procura tiver mais de 2 referencias… antigamente no selenium ele clicava na primeira… agora ele da um erro de multiplas referencias… usa um xpath ou outra forma de indentificacão para ver se funciona.



  • @davidson-jacob

    Teste o seguinte para selecionar o primeiro elemento que possua tal xpath :

    @navegador.find_element(:xpath, "(//*[@id='SAVE'])[1]").click
    


  • @Paulo-gonçalves

    Fiz a alteração como sugerido, mas exibiu outro erro:

    E clicar o botão “SAVE” # features/step_definitions/criarConta.rb:91
    invalid selector: Unable to locate an element with the xpath expression (//[@id=‘SAVE’)[1] because of the following error:
    SyntaxError: Failed to execute ‘evaluate’ on ‘Document’: The string '(//
    [@id=‘SAVE’)[1]’ is not a valid XPath expression.
    (Session info: chrome=60.0.3112.101)
    (Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 4.10.0-33-generic x86_64) (Selenium::WebDriver::Error::InvalidSelectorError)
    ./features/step_definitions/criarConta.rb:92:in /^clicar o botão "([^"]*)"$/' features/criarConta.feature:30:inE clicar o botão “SAVE”’*********



  • @davidson-jacob Tá faltando o asterisco no seu XPath, o erro tá dizendo que a expressão está inválida…

    E em vez de asterisco, é melhor colocar o tipo do elemento, no caso é um input, então fica "(//input[@id='Save'])[1]"



  • @stefanteixeira

    Fiz alteração usando o input o problema que está exibindo a primeiro mensagem de erro.

    Quando(/^clicar o botão "([^"]*)"$/) do |botaoSave| 
       @navegador.find_element(:xpath, "(//input[@id='SAVE'])[1]").click  
    end
    

    unknown error: Element <input title=“Save” accesskey=“a” class=“button primary” onclick=“var _form = document.getElementById(‘EditView’); _form.action.value=‘Save’; if(check_form(‘EditView’))SUGAR.ajaxUI.submitForm(_form);return false;” type=“submit” name=“button” value=“Save” id=“SAVE”> is not clickable at point (287, 20). Other element would receive the click: <a href="#" id=“grouptab_1” class=“dropdown-toggle grouptab” data-toggle=“dropdown”>…</a>



  • É o que o Galani já falou anteriormente, só ler a mensagem de erro… esse link com id grouptab_1 tá na frente do botão que vc quer clicar, pega um screenshot antes do teste clicar no botão e coloca aqui pra entendermos como é essa tela. Mostra onde tá esse link e os botões de Save.



  • @stefanteixeira Era isso mesmo… Tinha o dropdown do id grouptab_1 que estava ficando em cima do botão Save. Depois da alteração da step_definitions conseguir o clique no botão Save.
    Obrigado pelas dicas e paciência de todos.

    Quando(/^clicar o botão "([^"]*)"$/) do |botaoSave| 
       @navegador.find_element(:xpath, "(//input[@id='SAVE'])[2]").click   
    end


  • @davidson-jacob aparentemente, o 2º botão de Salvar não tem nenhum elemento “na frente”, mas se tentar Salvar com o 1º botão vai ocorrer o mesmo erro. Agora que você ajustou o mapeamento do elemento, o ideal é que você consiga interagir com qualquer um dos botões de Salvar (e qualquer outro elemento da tela que seja necessário).

    Caso aconteça novamente com outros elementos (comigo já aconteceu com bastante frequência em alguns projetos) sugiro:

    Se quiser, podes tentar uma das estratégias acima testando com o botão save[1], espero que ajude neste caso e em próximos, se ocorrer ;)

    – Samuel Lucas



  • @samuellucas Realmente estou tendo problemas para localizar o elemento. Estou usando outro exemplo e ainda não conseguir achar onde está o erro.
    Step defintions

    Quando(/^clicando no botão Add to cart "([^"]*)"$/) do |botaoAdd|
      #el = @navegador.find_element(id: "add_to_cart")
      el = @navegador.find_element(name: 'Submit')
      #@navegador.action.context_click(el).perform
      @navegador.action.move_to(el).click
    end
    

    Código do botão Add to cart

    <div class="box-cart-bottom">
    <div>
    	<p id="add_to_cart" class="buttons_bottom_block no-print">
    		<button type="submit" name="Submit" class="exclusive">
    			<span>Add to cart</span>
    		</button>
    	</p>
    </div>
    

    Erro exibido:

     E clicando no botão Add to cart "add_to_cart"                                                                     # features/step_definitions/realizarCompra.rb:62
          no such element: Unable to locate element: {"method":"name","selector":"Submit"}
            (Session info: chrome=60.0.3112.113)
    
    




  • @davidson-jacob

    Já tentou buscar por id: 'add_to_cart'? Também não entendi a necessidade dessa action move_to, com que intuito vc usou isso?



  • @stefanteixeira Pelo comando @navegador.find_element(:id, ‘add_to_cart’).click não é possível encontrar o elemento.

    O no such element: Unable to locate element: {"method":"id","selector":"add_to_cart"}
            (Session info: chrome=60.0.3112.113)
    


  • @davidson-jacob ah cara, agora que eu vi a página, esse botão tá em uma nova janela, vc precisa “mudar” pra essa janela pra poder interagir com os elementos dela.

    No WebDriver em Ruby tem que pesquisar como fazer… Pesquisa aí no Google “switch window webdriver ruby” pra mudar pra janela nova, depois que conseguir aí sim busca por esse botão.

    PS: Pq vc não usa o Capybara? É muito simples e ridiculamente fácil fazer essas coisas. Se vc pesquisar por “capybara” no próprio Agile Testers vc vai encontrar um monte de tutoriais, é bem tranquilo, escreve menos código e funciona muito bem. Uso desde o início do ano e não troco por nada, meus testes são bem estáveis e não me dão muita dor de cabeça.


 

Publicidade - Adsense

status at

20
Online

2.8k
Usuários

1.7k
Tópicos

5.7k
Posts

Parece que sua conexão com Agile Testers caiu, por favor aguarde enquanto tentamos reconectar.

});