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();
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);
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
Je l'ai fait avec jQuery:
page.execute_script %Q{ $('#some_id').prop('checked', true) }
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\")]
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