J'utilise l'API Java Selenium 2 avec FirefoxDriver. Lorsque je remplis un formulaire, des cases à cocher sont ajoutées à la page en fonction des entrées du formulaire.
Je voudrais simuler un clic sur ces cases à cocher en utilisant Selenium. Les éléments sont visibles et utilisables dans un navigateur ordinaire mais, sélénium affirme que les éléments ne sont pas visibles.
"Element is not currently visible and so may not be interacted with"
Puis-je forcer le sélénium à ignorer l'état non visible des éléments? Comment puis-je forcer Selenium à interagir avec l'élément non visible?
java
selenium-webdriver
Djondal
la source
la source
Réponses:
Selenium détermine qu'un élément est visible ou non par les critères suivants (utilisez un inspecteur DOM pour déterminer ce que css s'applique à votre élément, assurez-vous de regarder le style calculé):
Votre élément correspond à l'un de ces critères. Si vous n'avez pas la possibilité de modifier le style de l'élément, voici comment vous pouvez le faire avec force avec javascript (en supposant WebDriver puisque vous avez dit API Selenium2):
Mais cela ne déclenchera pas d'événement javascript, si vous dépendez de l'événement de modification pour cette entrée, vous devrez également le déclencher (de nombreuses façons de le faire, le plus simple est d'utiliser la bibliothèque javascript chargée sur cette page).
La source du contrôle de visibilité -
https://github.com/SeleniumHQ/selenium/blob/master/javascript/atoms/dom.js#L577
La spécification WebDriver qui définit cela -
https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#widl-WebElement-isDisplayed-boolean
la source
Parfois, cela signifie qu'il y a plusieurs éléments sur une page qui ont la même propriété que vous essayez de rechercher et que vous "parlez au mauvais".
Si votre élément ne peut pas être identifié de manière unique par: id ou: name (ou: class), cela pourrait être délicat.
Parfois, la recherche de l'élément par le: xpath aidera et dans certains cas même ce n'est pas pratique.
Dans ces cas, vous devrez peut-être obtenir tous les éléments qui correspondent à vos critères et référencer le bon par l'index. C'est sale, mais ça marche.
J'utilise Selenium / Watir de l'application Ruby on Rails, donc dans mon cas, l'exemple serait:
J'espère que cela t'aides.
la source
J'ai eu un problème similaire, mais il était lié au fait que l'élément n'était pas visible dans la fenêtre. J'ai pris une capture d'écran et j'ai réalisé que la fenêtre du navigateur était trop étroite et que l'élément ne pouvait pas être vu. J'ai fait un de ceux-ci et cela a fonctionné:
Voir: WebDriver.maximize_window ()
la source
Ou vous pouvez utiliser Selenium Action Class pour simuler l'interaction de l'utilisateur - Par exemple
la source
Il existe également un autre cas où l'élément visible sera reconnu comme non visible:
Afin de vérifier si l'élément avec lequel vous ne souhaitez pas interagir est transformé en CSS, sur CHROME, procédez comme suit:
la source
L'invisibilité peut également être due au moment où l'élément est censé apparaître lentement. Forcer le navigateur à attendre un peu peut aider dans ce cas.
Voir, par exemple, la question sur l' attente de WebDriver jusqu'à ce qu'un élément soit présent .
la source
J'ai eu le même problème avec le sélénium 2 dans Internet Explorer 9, mais ma solution est vraiment étrange. Je n'ai pas pu cliquer sur les entrées de mon formulaire -> répétitions de sélénium, elles ne sont pas visibles.
Cela s'est produit lorsque ma forme avait des ombres courbes -> http://www.paulund.co.uk/creating-different-css3-box-shadows-effects : dans le concret "Effet n ° 2"
Je n'ai aucune idée, pourquoi et comment cette solution de pseudo-élément a arrêté les tests de sélénium, mais cela fonctionne pour moi.
la source
Vous ne pouvez pas forcer l'accès / le changement d'élément auquel l'utilisateur n'a normalement pas accès, car Selenium est conçu pour imiter l'interaction de l'utilisateur.
Si cette erreur se produit, vérifiez si:
maximize()
dans node.js ,maximize_window()
en Python),executeScript()
dans node.js ,execute_script()
en Python).la source
Je viens de résoudre cette erreur en utilisant capybara dans le projet ror en ajoutant:
à
features/support/env.rb
.la source
Je viens de résoudre cette erreur en attendant la propriété d'affichage de l'élément
la source
J'entre dans l'exception ElementNotVisibleException en utilisant du sélénium pour des tests fonctionnels sur un site django avec des glyphicons bootstrap comme liens dans des modèles comme:
Lors de mes tests fonctionnels, le style bootstrap n'est pas chargé, puis essayer de cliquer sur de tels liens lèvera ElementNotVisibleException. J'arrive à les rendre cliquables en ajoutant simplement un espace dans le tag, comme ça:
la source
Il y a beaucoup de bonnes réponses sur cette page.
Les deux sont discutés dans divers détails ci-dessus. La réponse que je n'ai pas vue était ScrollToElement. Il semble que vous traitez une liste d'éléments, tandis que vous créez plus d'éléments, des cases à cocher. Cela peut entraîner le déplacement d'éléments de votre liste hors de la page visible. Parfois, vous pouvez voir l'élément à l'œil nu, mais vous ne pouvez tout simplement pas cliquer dessus. Lors du traitement de listes, vous devez parfois interrompre le défilement.
Parce que je rencontre cela, j'ai créé un PageScroll.java et y ai placé mes scripts de défilement. Voici quelques-unes des méthodes de cette classe:
voir Faire défiler l'élément dans la vue avec sélénium pour plus d'exemples
la source
La réponse acceptée a fonctionné pour moi. Vous trouverez ci-dessous un code pour trouver l'élément parent qui fait croire à Selenium qu'il n'est pas visible.
la source
Pour ajouter mon grain de sable ici: si un élément réside derrière un div fixe, il sera considéré comme non visible et vous ne pourrez pas cliquer dessus; cela m'est arrivé récemment et je l'ai résolu en exécutant un script comme recommandé ci-dessus, ce qui fait:
la source