Comment utiliser find_element_by_link_text () correctement pour ne pas déclencher NoSuchElementException?
J'ai un code HTML comme ceci:
<div class="links nopreview"><span><a class="csiAction"
href="/WebAccess/home.html#URL=centric://REFLECTION/INSTANCE/_CS_Data/null">Home</a></span> • <span><span><a class="csiAction"
href="/WebAccess/home.html#URL=centric://SITEADMIN/_CS_Site">Setup</a></span> • </span><span><a
title="Sign Out" class="csiAction csiActionLink">Sign Out</a></span></div>
Je voudrais cliquer sur le lien qu'a le texte Maison. Comme cette famille, le lien s'affiche après la connexion, j'ai un code comme ceci:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re
browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://myServer/WebAccess/login.html") # Load App page
elem = browser.find_element_by_name("LoginID") # Find the Login box
elem.send_keys("Administrator")
elem = browser.find_element_by_name("Password") # Find the Password box
elem.send_keys("Administrator" + Keys.RETURN)
#try:
elem = browser.find_element_by_link_text("Home")
elem.click()
La partie jusqu'à la connexion fonctionne très bien. Cependant, la dernière ligne est problématique
elem = browser.find_element_by_link_text("Home")
Il soulève cette NoSuchElementException où le lien vers l'Accueil est-il comme vous pouvez le voir dans le code HTML.
raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: u'Unable to locate element: {"method":"link text","selector":"Home"}'
Aucune indication quant à ce que je fais de mal, s'il vous plaît?
source d'informationauteur Bhavani Kannan
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé d'ajouter un implicite attendre à cela afin qu'il vous attend au lieu de courir rapidement.
La
implicitly_wait
appel rend le navigateur de scrutin jusqu'à ce que le point est sur la page et visible pour être en interaction avec.Peut-être l'élément que vous recherchez ne correspond pas exactement cette chaîne de texte?
Je sais que cela peut être difficile si on dirait qu'il n'a à l'écran, mais il y a parfois des bizarreries incorporé comme ce balisage simple "Home" ou "Home" qui rend le premier caractère italique:
Edit: après avoir écrit la réponse ci-dessus, j'ai étudié la question de plus près et découvre l'exemple de code HTML ne montrer "à la Maison" en texte brut, mais n'était pas visible à cause des longues lignes pas d'emballage. J'ai donc édité le po pour enrouler la ligne pour des raisons de lisibilité.
Nouvelle observation: j'ai remarqué que la Déconnexion de l'élément a un attribut "title", mais le lien vers l'Accueil de l'élément n'a pas un tel--essayer de donner à l'un et à l'aide que.
Les problèmes les plus courants avec
NoSuchElementException
tandis que l'élément est qu'il y a:Solution pourrait inclure:
driver.window_handles
,driver.find_element_by_xpath(u'//a[text()="Foo"]').click()
,pdb
pour diagnostiquer votre problème de manière plus efficace.Voir aussi: Comment find_element_by_link_text tout en ayant: NoSuchElement Exception?
Essayez d'ajouter un implicite attendre à ce, afin d'attendre, au lieu de courir trop vite.
Ou
autre chose que vous pouvez
import time
et l'utilisationtime.sleep(25)