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?

@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.

@stefanteixeira Estou estudando automação, pode ser qualquer framework. Valeu pela dica.

Saquei… Capybara é o mais usado em Ruby e o projeto é bem ativo, estão sempre com features novas.

@stefanteixeira Show de bola o framework Capybara. Conseguir criar vários scripts. Teve duas dúvidas que ainda não conseguir resolver. Valeu pela dica.

Log in to reply

Looks like your connection to Agile Testers was lost, please wait while we try to reconnect.