55 votes

Défilement vers un élément à l'aide de webdriver ?

Je suis encore en train d'apprendre et en réponse à une de mes questions : ici On m'a dit que cela pouvait être dû au fait que l'élément en question n'est pas visible.

J'ai regardé la documentation et SO, voici la réponse la plus pertinente : ici

Vous pouvez utiliser la classe "org.openqa.selenium.interactions.Actions" pour vous déplacer vers un élément :

WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
## actions.click();
actions.perform();

Lorsque j'essaie d'utiliser la commande ci-dessus pour faire défiler l'élément : Il dit WebElement non défini.

Je pense que c'est parce que je n'ai pas importé le module correspondant. Quelqu'un peut-il m'indiquer ce que je suis censé importer ?

Edit : Comme l'a souligné alecxe, c'était du code java.

Mais en attendant, après avoir essayé de comprendre pendant un certain temps. J'ai trouvé la méthode d'importation pour WebElement :

from selenium.webdriver.remote.webelement import WebElement

Ça pourrait aider quelqu'un comme moi.

Le comment est aussi une bonne leçon, IMO :

Je suis allé : Documentation Le site

class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)

Doivent être séparés dans le formulaire de commande mentionné ci-dessus.

99voto

alecxe Points 50783

Vous essayez d'exécuter du code Java avec Python. Dans Python/Selenium, la fonction org.openqa.selenium.interactions.Actions se reflètent dans ActionChains classe :

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id("my-id")

actions = ActionChains(driver)
actions.move_to_element(element).perform()

Vous pouvez également faire défiler l'affichage en cliquant sur le lien suivant scrollIntoView() :

driver.execute_script("arguments[0].scrollIntoView();", element)

Si vous êtes intéressé par les différences :

41voto

Andersson Points 31774

Il ne s'agit pas d'une réponse directe à la question (il ne s'agit pas de Actions ), mais il vous permet également de faire défiler facilement les éléments requis :

element = driver.find_element_by_id('some_id')
element.location_once_scrolled_into_view

Ceci a en fait l'intention de vous renvoyer des coordonnées ( x , y ) de l'élément sur la page, mais aussi défilement vers le bas à droite jusqu'à l'élément cible

-1voto

Andersson Points 31774

Il existe une autre option pour faire défiler la page jusqu'à l'élément requis. si l'élément a "id" attribut

Si vous voulez naviguer vers la page et descendre jusqu'à l'élément avec la touche @id il peut être fait automatiquement en ajoutant #element_id à l'URL...

Exemple

Disons que nous devons naviguer dans la documentation Selenium Waits et faire défiler la page jusqu'à la section "Implicit Wait". Nous pouvons faire

driver.get('https://selenium-python.readthedocs.io/waits.html')

et ajoutez le code pour le défilement... OU utilisez

driver.get('https://selenium-python.readthedocs.io/waits.html#implicit-waits')

pour naviguer vers la page ET faire défiler automatiquement la page vers l'élément avec id="implicit-waits" ( <div class="section" id="implicit-waits">...</div> )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X