3
respostas

Find element XPATH não funciona após realizar um navegador.switch_to.window(handle) "PYTHON"

Estou fazendo uma automação com Python e Selenium, onde em determinado momento, após eu clicar um um botão é aberto uma nova janela, ná qual preciso clicar em botão desta nova janela.

Para acessar a nova janela usei o seguinte código:

#Switch a new windows all_handles = navegador.window_handles print('all = ',all_handles) for handle in all_handles: print('handle =',handle) print('parent =', parent_handle) if handle != parent_handle: navegador.switch_to.window(handle) current = navegador.current_window_handle print('current =', current) time.sleep(2) break

Até aqui vi que o switch, foi feito com sucesso, mas infelizmente quando tento clicar em qualquer botão da nova janela o programa simplesmente fica parado, assim dificultando o troubleshoot.Comando para clicar em um botão da nova janela: navegador.find_element(By.XPATH,'XXXXXXXXX).click()

Gostaria de saber se alguém já passou por isso e consegue me dar uma ajuda ?

Obrigado

3 respostas

Oi Thiago, tudo bem?

Com base na compreensão do seu código, observo que você está utilizando o Selenium para realizar automação em Python e está encontrando dificuldades ao tentar clicar em um botão em uma nova janela após usar o método navegador.switch_to.window(handle).

Um caminho para a sua questão seria verificar se o elemento que você está tentando clicar está presente na nova janela. Isso pode ser feito usando um tempo de espera explícito antes de tentar localizar o elemento. Veja um exemplo:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# ...

# Aguarda até que o elemento seja clicável
wait = WebDriverWait(navegador, 10)
elemento = wait.until(EC.element_to_be_clickable((By.XPATH, 'XXXXXXXXX')))

# Clica no elemento
elemento.click()

Dessa maneira, o código aguardará até que o elemento esteja clicável na nova janela antes de tentar efetuar o clique.

Espero que isso ajude.

Um abraço e bons estudos.

Obrigado pela resposta.

Tentei executar sua sugestão, mas obtive o mesmo resultado ficou parado no seguinte comando:

elemento = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="NavAreaTree_treeSel(7)"]')))

Tentei com varios elementos diferentes da mesma tela e sempre com o mesmo resultado de congelamento.

Com os prints consegui confirmar que acorreu OK o navegador.switch_to.window(handle), mas infelizmente ainda não consigo interagir com essa nova tela. Se tiver mais ideias ficarei muito feliz, rs

Pedaço do código e seus displays

#Switch a new windows all_handles = navegador.window_handles print('all = ',all_handles) for handle in all_handles: print('handle =',handle) print('parent =', parent_handle) if handle != parent_handle: navegador.switch_to.window(handle) current = navegador.current_window_handle print('current =', current) time.sleep(2) break

#screeshot Security logs wait = WebDriverWait(navegador, 20) elemento = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="NavAreaTree_treeSel(7)"]'))) elemento.click()

parent = 2525F5ED550ACDFBDF800171792F8DE4 all = ['2525F5ED550ACDFBDF800171792F8DE4', 'DDFCF6DE32A550949E3278436F6AEEFC'] handle = 2525F5ED550ACDFBDF800171792F8DE4 parent = 2525F5ED550ACDFBDF800171792F8DE4 handle = DDFCF6DE32A550949E3278436F6AEEFC parent = 2525F5ED550ACDFBDF800171792F8DE4 current = DDFCF6DE32A550949E3278436F6AEEFC