web-dev-qa-db-fra.com

Comment cliquer sur un élément caché dans Selenium WebDriver?

J'ai une grille qui affiche des enregistrements. Lorsque je clique sur un enregistrement et inspecte cet élément, il est indiqué qu'il est masqué mais visible dans la grille. 

Mon HTML est:

<a href="http://192.168.1.6/eprint_prod_3.8/settings/othercost_add.aspx?type=edit&id=805" title="Plastic Spiral Bind"
<div style="float: left; width: 99%; overflow: hidden; height: 15px; overflow: hidden"> Plastic Spiral Bind </div>
</a>

Le code ci-dessus est masqué lors de l'inspection, mais il est visible dans la grille.

Code sélénium:

driver.findElement(By.partialLinkText("Plastic Spiral Bind")).click();
15
Santhosh.S

Commencez par stocker cet élément dans object, disons element, puis écrivez le code suivant pour cliquer sur cet élément caché:

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
24
TDHM

Vous avez deux approches. Selenium a été spécialement écrit pour NE PAS permettre l’interaction avec des éléments cachés. Le rationnel est que si une personne ne peut pas exécuter cette action, alors Selenium ne le devrait pas non plus. Par conséquent, pour effectuer le clic via Selenium, vous devez exécuter l'action qu'un utilisateur effectuerait pour rendre ce bouton visible (par exemple, un événement survolé avec la souris, un autre élément, etc.), puis le clic une fois visible.

Cependant, Selenium vous permet d’exécuter du Javascript dans le contexte d’un élément, vous pouvez donc écrire du Javascript pour exécuter l’événement click même s’il est masqué.

Ma préférence est de toujours essayer d'effectuer les actions pour rendre le bouton visible 

12
Robbie Wareham

Je l'ai fait avec jQuery:

page.execute_script %Q{ $('#some_id').prop('checked', true) }
0
aarkerio
overflow:hidden 

ne signifie pas toujours que l'élément est caché ou inexistant dans le DOM, cela signifie que les caractères en débordement qui ne rentrent pas dans l'élément sont supprimés. Fondamentalement, cela signifie que ne pas afficher la barre de défilement même si elle doit être affichée, donc dans votre cas, le lien avec le texte 

Reliure spirale en plastique

pourrait éventuellement être montré comme "Plastic Spir ..." ou similaire. Il est donc possible que ce linkText soit effectivement inexistant. 

Donc, vous pouvez probablement essayer:

driver.findElement(By.partialLinkText("Plastic ")).click();

ou xpath:

//a[contains(@title, \"Plastic Spiral Bind\")]
0
Erki M.

Si le <div> a un identifiant ou un nom, vous pouvez utiliser find_element_by_id ou find_element_by_name

Vous pouvez également essayer avec le nom de la classe, css et xpath

find_element_by_class_name
find_element_by_css_selector
find_element_by_xpath
0
user2118784