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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage