Wie finde ich_element_by_link_text bei: NoSuchElement-Ausnahme?
Diese Frage wurde immer wieder gestellt - und obwohl ich alle Hacks ausprobiert habe, kann ich immer noch nicht herausfinden, was los ist.
Ich habe versucht, die implizite_Wartezeit auf 30 zu erhöhen (und sie sogar auf 100 zu erhöhen) - aber es hat nicht funktioniert.
Anwendungsfall -: Ich versuche, eine Liste zu erstellen, die alle Elemente auf der Seite auffülltHierAls Basisfall - und ich beabsichtige, dies an ein Minimodul zu binden, das ich bereits mit scrapy besitze, das alle (Seiten mit ähnlichen Webelementen) gecrawlten Links enthält - wird also im Wesentlichen die gesamte Pipeline erstellt, nach der ich fertig bin diese.
###My source code - generated via Selenium IDE, exported to a Python webdriver and manipulated a little later ###
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.wait import WebDriverWait
import unittest, time, re
class Einstein(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(30)
self.base_url = "http://shopap.lenovo.com/in/en/laptops/"
self.verificationErrors = []
self.accept_next_alert = True
def test_einstein(self):
driver = self.driver
driver.get(self.base_url)
print driver.title
driver.find_element_by_link_text("T430").click()
print driver.title
# driver.find_element_by_xpath("id('facetedBrowseWrapper')/div/div/div[1]/div[2]/ul[1]/li[1]/a").click()
driver.find_element_by_xpath("//div[@id='subseries']/div[2]/div/p[3]/a").click()
print driver.title
# driver.find_element_by_xpath("//div[@id='subseries']/div[2]/div/p[3]/a").click()
try: self.assertEqual("Thinkpad Edge E530 (Black)", driver.find_element_by_link_text("Thinkpad Edge E530 (Black)").text)
except AssertionError as e: self.verificationErrors.append(str(e))
# Everything ok till here
#**THE CODE FAILS HERE**#
laptop1 = driver.find_element_by_link_text("Thinkpad Edge E530 (Black)").text
print laptop1
price1 = driver.find_element_by_css_selector("span.price").text
print price1
detail1 = self.is_element_present(By.CSS_SELECTOR, "div.desc.std")
print detail1
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException, e: return False
return True
def is_alert_present(self):
try: self.driver.switch_to_alert()
except NoAlertPresentException, e: return False
return True
def close_alert_and_get_its_text(self):
try:
alert = self.driver.switch_to_alert()
alert_text = alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally: self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
Errors & output :
ekta@ekta-VirtualBox:~$ python einstein.py
Laptops & Ultrabooks | Lenovo (IN)
ThinkPad T430 Laptop PC for Business Computing | Lenovo (IN)
Buy Lenovo Thinkpad Laptops | Lenovo Thinkpad Laptops Price India
E
======================================================================
ERROR: test_einstein (__main__.Einstein)
----------------------------------------------------------------------
Traceback (most recent call last):
File "einstein.py", line 27, in test_einstein
try: self.assertEqual("Thinkpad Edge E530 (Black)", driver.find_element_by_link_text("Thinkpad Edge E530 (Black)").text)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 246, in find_element_by_link_text
return self.find_element(by=By.LINK_TEXT, value=link_text)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 680, in find_element
{'using': by, 'value': value})['value']
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 165, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 158, in check_response
raise exception_class(message, screen, stacktrace)
NoSuchElementException: Message: u'Unable to locate element: {"method":"link text","selector":"Thinkpad Edge E530 (Black)"}' ; Stacktrace:
at FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmphli5Jg/extensions/[email protected]/components/driver_component.js:8444)
at fxdriver.Timer.prototype.setTimeout/<.notify (file:///tmp/tmphli5Jg/extensions/[email protected]/components/driver_component.js:386)
----------------------------------------------------------------------
Ran 1 test in 79.348s
FAILED (errors=1)
Fragen & Kommentare:
Wenn Sie diese Frage beantworten, geben Sie bitte an, warum dieses spezielle "find_element_by_link_text" nicht funktioniert.
(Sehr einfach) In der Benutzeroberfläche meiner Selen-IDE -> Alle verfügbaren Befehle anzeigen - Warum wird die CSS (find_element_by_css_selector) nicht für alle Webelemente angezeigt?Gibt es eine Möglichkeit, die Eingabe eines Elements als CSS-Selektor zu erzwingen?
Falls Sie vorschlagen, einen anderen Locator zu verwenden, geben Sie bitte an, ob dies eine konsistente Methode zum Abrufen von Elementen ist. (1)
Funktioniert assert, um die Ausnahmen zu erfassen und "weiterzumachen" - da ich auch nach dem Versuch, "verify" -, "assert" -Schleifen zu verwenden, dieses "find_element_by_link_text" nicht abrufen kann
Ich habe versucht, dieses "Element" mit Xpath zu erstellen, aber in der Ansicht Xpath (in Firefox) sehe ich nichts, um zu verstehen, warum das passiert. (Natürlich habe ich den Namespace ": x" entfernt.)
Abgesehen von anderen Dingen, die ich versucht habeimplicity_wait(30)
:
find_element_by_partial_link(“Thinkpad”) and appending Unicode to this (wasn’t sure if it was reading the brackets ( , driver.find_element_by_link_text(u"Thinkpad Edge E530 (Black)").text, still did not work.
Verwandte Fragen:
Wie verwende ich find_element_by_link_text () richtig, um NoSuchElementException nicht auszulösen?NoSuchElement-Ausnahme bei Verwendung von find_element_by_link_text, wenn implizit_warten nicht funktioniert?