Existe-t-il un moyen dans Selenium 1.x ou 2.x de faire défiler la fenêtre du navigateur afin qu'un élément particulier identifié par un XPath soit en vue du navigateur? Il existe une méthode de mise au point dans Selenium, mais elle ne semble pas faire défiler physiquement la vue dans FireFox. Quelqu'un at-il des suggestions sur la façon de procéder?
La raison pour laquelle j'en ai besoin est que je teste le clic d'un élément sur la page. Malheureusement, l'événement ne semble fonctionner que si l'élément est visible. Je n'ai pas le contrôle du code qui se déclenche lorsque l'élément est cliqué, je ne peux donc pas le déboguer ou y apporter des modifications.La solution la plus simple consiste donc à faire défiler l'élément en vue.
selenium
scroll
automated-tests
Dan à la demande
la source
la source
Réponses:
J'ai essayé beaucoup de choses en ce qui concerne le défilement, mais le code ci-dessous a fourni de meilleurs résultats.
Cela défilera jusqu'à ce que l'élément soit visible:
la source
position: fixed
sur votre page et qu'il obscurcit l'élément sur lequel Selenium veut cliquer. Très souvent, ces éléments fixes vont en bas, donc le réglage lescrollIntoView(true)
déplace bien vers le haut de la fenêtre.true
àscrollIntoView
si l'objet que vous faites défiler jusqu'à est au- dessous où vous êtes,false
si l'objet que vous faites défiler jusqu'à est au- dessus où vous êtes actuellement. J'ai eu du mal à comprendre cela.Vous pouvez utiliser la
org.openqa.selenium.interactions.Actions
classe pour passer à un élément.Java:
Python:
la source
Vous voudrez peut-être essayer ceci.
la source
js.ExecuteScript("arguments[0].scrollIntoView(true);" + "window.scrollBy(0,-100);", e);
pour IE et Firefox etjs.ExecuteScript("arguments[0].scrollIntoViewIfNeeded(true);", e);
pour Chrome. Facile.((JavascriptExecutor) driver).executeScript("javascript:window.scrollBy(0,250)");
Cela a fonctionné dans Chrome. Et la seule solution qui a réellement fonctionné pour moi. Même situation que le premier commentateur, j'avais un élément fixe en bas qui obscurcissait toujours l'élément sur lequel je devais cliquer.Si vous souhaitez faire défiler la fenêtre Firefox à l'aide du pilote Web Selenium, l'une des façons consiste à utiliser JavaScript dans le code Java. Le code JavaScript pour faire défiler vers le bas (en bas de la page Web) est le suivant:
la source
Cibler n'importe quel élément et envoyer des touches vers le bas (ou vers le haut / gauche / droite) semble également fonctionner. Je sais que c'est un peu un hack, mais je ne suis pas vraiment dans l'idée d'utiliser JavaScript pour résoudre le problème de défilement non plus.
Par exemple:
la source
var elem = driver.FindElement(By.Id("element_id")); elem.SendKeys(Keys.PageDown);
Pour plus d'exemples, allez ici . Tout en russe, mais le code Java est interculturel :)
la source
Dans Selenium, nous devons prendre l'aide d'un exécuteur JavaScript pour faire défiler jusqu'à un élément ou faire défiler la page:
Dans la déclaration ci-dessus se
element
trouve l'élément exact où nous devons faire défiler. J'ai essayé le code ci-dessus, et cela a fonctionné pour moi.J'ai un post complet et une vidéo à ce sujet:
http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/
la source
Vous pouvez utiliser cet extrait de code pour faire défiler:
C #
Voilà
la source
Cela a fonctionné pour moi:
la source
Selenium 2 essaie de faire défiler jusqu'à l'élément puis de cliquer dessus. En effet, Selenium 2 n'interagira pas avec un élément à moins qu'il ne pense qu'il est visible.
Le défilement vers l'élément se fait implicitement, il vous suffit donc de rechercher l'élément, puis de travailler avec lui.
la source
WebElement.click()
l'élément doit être visible pour pouvoir cliquer dessus. Il ne défilera pas en votre nom.Utilisez le pilote pour envoyer des clés comme la touche pagedownou downarrowpour afficher l'élément. Je sais que c'est une solution trop simple et pourrait ne pas être applicable dans tous les cas.
la source
element
sur la page consultable et envoyer PageDown aelement.SendKeys(Keys.PageDown);
fonctionné pour moi.D'après mon expérience, Selenium Webdriver ne fait pas défiler automatiquement jusqu'à un élément au clic lorsqu'il y a plus d'une section déroulante sur la page (ce qui est assez courant).
J'utilise Ruby, et pour mon AUT, j'ai dû patcher la méthode click comme suit;
La méthode 'location_once_scrolled_into_view' est une méthode existante sur la classe WebElement.
Je comprends que vous n'utilisiez peut-être pas Ruby, mais cela devrait vous donner quelques idées.
la source
module Capybara :: module Node
et j'ai dû appelernative.location_once_scrolled_into_view
au lieu de justelocation_once_scrolled_into_view
. J'ai également sauvé::Selenium::WebDriver::Error::UnknownError
, ce que j'obtiens souvent dans Firefox 44.0.2. Mais je trouve que cette solution n'est pas assez flexible et, finalement, je mets les<Element>.native.location_once_scrolled_into_view
appels dans le test d'acceptation lui-même, suivi immédiatement par lespage.execute_script('window.scrollByPages(-1)')
besoins.Element#scroll_into_view
qui délègue à Seleniumlocation_once_scrolled_into_view
. Mais les deux ne font rien de différent du comportement par défaut de Selenium, donc les éléments de débordement peuvent toujours obstruer tout ce que nous essayons de cliquer.Le script Ruby pour faire défiler un élément dans la vue est comme ci-dessous.
la source
Parfois, j'ai également été confronté au problème de défilement avec Selenium. J'ai donc utilisé javaScriptExecuter pour y parvenir.
Pour faire défiler vers le bas:
Ou aussi
Pour faire défiler vers le haut:
Ou,
la source
Si vous pensez que d'autres réponses étaient trop hacky, celle-ci l'est aussi, mais aucune injection JavaScript n'est impliquée.
Lorsque le bouton est hors de l'écran, il se casse et défile jusqu'à lui, alors réessayez ... ¯ \ _ (ツ) _ / ¯
la source
Il s'agit d'une solution répétée avec JavaScript, mais avec un élément d'attente supplémentaire.
Sinon
ElementNotVisibleException
peut apparaître si une action sur l'élément est en cours.la source
J'ai utilisé cette méthode pour faire défiler l'élément et cliquer:
la source
scrollIntoView(false)
fonctionné, maisscrollIntoView(true)
pas. L'un ou l'autre peut fonctionner , cela dépend de votre scénario.la source
Vous pouvez visiter la page Scroll Web elements and Web page- Selenium WebDriver utilisant Javascript :
la source
Dans la plupart des situations de défilement, ce code fonctionnera.
la source
JAVA
Essayez défilement à l' élément utiliser la
x y
position et l' utilisationJavascriptExecutor
de c'est l' argument:"window.scrollBy(x, y)"
.Après l'importation:
Vous devez d'abord obtenir l'
x y
emplacement de l'élément.la source
Je ne sais pas si la question est toujours d'actualité mais après avoir fait référence à la documentation scrollIntoView de https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView .
La solution la plus simple serait
Cela fait défiler l'élément au centre de la page.
la source
Le comportement par défaut de Selenium nous fait défiler pour que l'élément soit à peine visible en haut de la fenêtre. De plus, tous les navigateurs n'ont pas exactement le même comportement. C'est très peu satisfaisant. Si vous enregistrez des vidéos des tests de votre navigateur, comme je le fais, ce que vous voulez, c'est que l'élément défile dans la vue et soit centré verticalement .
Voici ma solution pour Java:
Et puis, pour faire défiler, vous l'appelez comme ceci:
la source
Voici comment je le fais avec PHP webDriver pour Selenium. Cela fonctionne pour le serveur autonome Selenium 2.39.0 + https://github.com/Element-34/php-webdriver + Firefox 25.0
Remarque: j'utilise une version personnalisée du pilote Web Element34 PHP. Mais il n'y a aucun changement dans le noyau. J'utilise juste mon "welement" au lieu de "element". Mais cela n'a aucune influence sur le cas en question. L'auteur du pilote dit «de permettre à presque tous les appels d'API d'être une transformation directe de ce qui est défini dans le protocole WebDriver lui-même». Vous ne devriez donc avoir aucun problème avec d'autres langages de programmation.
Un simple clic ne fonctionnera pas dans ma configuration. Il fera un défilement au lieu de cliquer, j'ai donc dû cliquer deux fois sans appeler "location_in_view ()".
Remarque: Cette méthode fonctionne pour les éléments qui peuvent être affichés, comme une entrée de type bouton.
Jetez un œil à: http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/location
La description de JsonWireProtocol # suggère l'utilisation de location + moveto, car location _in_view est une méthode interne.
la source
Quelque chose qui a fonctionné pour moi a été d'utiliser la méthode Browser.MoveMouseToElement sur un élément en bas de la fenêtre du navigateur. Miraculeusement, cela a fonctionné dans Internet Explorer, Firefox et Chrome.
J'ai choisi cela plutôt que la technique d'injection JavaScript simplement parce qu'elle était moins hacky.
la source
J'ai fait des tests avec des composants ADF et vous devez avoir une commande distincte pour le défilement si le chargement paresseux est utilisé. Si l'objet n'est pas chargé et que vous essayez de le trouver à l'aide de Selenium, Selenium lèvera une exception d'élément introuvable.
la source
Si rien ne fonctionne, essayez ceci avant de cliquer:
la source
En Java, nous pouvons faire défiler en utilisant JavaScript, comme dans le code suivant:
Vous pouvez affecter une valeur souhaitée à la variable "elm.scrollTop".
la source
Une solution est:
la source
Ce code fonctionne pour moi:
la source