title: How to find_element_by_link_text while having: NoSuchElement Exception?
body: <p>This question has been asked over and over again - and in-spite of trying all the hacks I still can't seem to figure out what's wrong.</p>
  
  <p><strong>I tried increasing the implicitly_wait to 30 (and even increased it upto 100) - yet it did not work.</strong> </p>
  
  <p><strong><em>Use case</em></strong> -: I am trying to create a list that wil populate all the items in the page <a href="http://www.thedostore.com/laptops/thinkpad-laptops.html" rel="nofollow noreferrer">here</a>, as a base case - and I intend to bind this to a mini-module that I already have with scrapy which has all (pages with similar web elements) crawled links - so essentially will be building the whole pipeline, post I am done with this.</p>
  
  <pre><code>###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
  </code></pre>
  
  <hr>
  
  <pre><code>        #**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 &amp; output :
  ekta@ekta-VirtualBox:~$ python einstein.py
  Laptops &amp; 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/fxdriver@googlecode.com/components/driver_component.js:8444)
      at fxdriver.Timer.prototype.setTimeout/&lt;.notify (file:///tmp/tmphli5Jg/extensions/fxdriver@googlecode.com/components/driver_component.js:386) 
  
  ----------------------------------------------------------------------
  Ran 1 test in 79.348s
  
  FAILED (errors=1)
  </code></pre>
  
  <p><strong>Questions &amp; comments:</strong> </p>
  
  <ol>
  <li><p>If you are answering this question - please mention why this specific "find_element_by_link_text" does not work. </p></li>
  <li><p>(Very Basic) In the GUI of my selenium IDE -> Show all available commands - why dont I see the css (find_element_by_css_selector) for all the web elements - <strong>is there a way to force feed an element to be read as a CSS selector ?</strong></p></li>
  <li><p>In case you suggest using some other locator - please mention if that will be consistent way to fetch elements, given (1) </p></li>
  <li><p>Does assert work to capture the exceptions and "move on" - since even after trying "verify" , "assert" loops, I still cant fetch this  "find_element_by_link_text"</p></li>
  <li><p>I tried using Xpath to build this "element" , but in the view Xpath (in firefox) - I see nothing, to clue why that happens (Of course I removed the namespace ":x" )</p></li>
  </ol>
  
  <p>Other things I tried apart from <code>implicity_wait(30)</code>:</p>
  
  <pre><code>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.
  </code></pre>
  
  <hr>
  
  <p>Related questions:</p>
  
  <ul>
  <li><a href="https://stackoverflow.com/questions/6936149/selenium-python-find-element-by-link-text">How to use find_element_by_link_text() properly to not raise NoSuchElementException?</a></li>
  <li><a href="https://stackoverflow.com/questions/12905667/selenium-find-element-by-link-text-nosuchelementexception">NoSuchElement Exception using find_element_by_link_text when implicitly_wait doesn&#39;t work?</a></li>
  </ul>