title: How to locate elements with Appium and Python?
body: <ul>
  <li>Testing a simple Calculator App on Android Device.</li>
  <li>Tried many methods to locate an element, but failed.</li>
  <li>The information I can get from UI Automator Viewer is the class name, button name, co-ordinates. I just want to locate the button "7" and press it.</li>
  </ul>
  
  <p>Codes:</p>
  
  <pre><code>import unittest, time, os
  from appium import webdriver
  from time import sleep
  
  
  
  
  class Android_Maaii(unittest.TestCase):
      "Class to run tests against the ATP WTA app"
      def setUp(self):
          "Setup for the test"
          PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
          desired_caps = {}
          desired_caps['platformName'] = 'Android'
          desired_caps['platformVersion'] = '4.2.2'
          desired_caps['deviceName'] = 'Galaxy S4'
          desired_caps['app'] = PATH('C:\Python34\MyCalculator.apk')        
          # Since the app is already installed launching it using package and activity name
          desired_caps['appPackage'] = 'com.example.mythirdapp'
          desired_caps['appActivity'] = '.MainActivity'
          # Adding appWait Activity since the activity name changes as the focus shifts to the ATP WTA app's first page
          desired_caps['appWaitActivity'] = 'com.example.mythirdapp.MainActivity'
          self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
  
      def tearDown(self):
          "Tear down the test"
          self.driver.quit()
  
      def test_maaii(self):
          #"Testing the ATP WTA app "
          self.driver.implicitly_wait(30)
          time.sleep(5)
  
          print ("Slept for 5 sec...")
  
          element = self.driver.find_element_by_name('7')
  
  #---START OF SCRIPT
  if __name__ == '__main__':
      suite = unittest.TestLoader().loadTestsFromTestCase(Android_Maaii)
      unittest.TextTestRunner(verbosity=2).run(suite)
  </code></pre>
  
  <p>Error Report:</p>
  
  <pre><code>ERROR: test_maaii (__main__.Android_Maaii)
  ----------------------------------------------------------------------
  Traceback (most recent call last):
    File "C:\Python34\testfiles\MaaiiTest_new.py", line 59, in test_maaii
      element = self.driver.find_element_by_name('7')
    File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 302, in find_element_by_name
      return self.find_element(by=By.NAME, value=name)
    File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 662, in find_element
      {'using': by, 'value': value})['value']
    File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 173, in execute
      self.error_handler.check_response(response)
    File "C:\Python34\lib\site-packages\appium\webdriver\errorhandler.py", line 29, in check_response
      raise wde
    File "C:\Python34\lib\site-packages\appium\webdriver\errorhandler.py", line 24, in check_response
      super(MobileErrorHandler, self).check_response(response)
    File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 166, in check_response
      raise exception_class(message, screen, stacktrace)
  selenium.common.exceptions.WebDriverException: Message: 'An unknown server-side error occurred while processing the command.' 
  
  ======================================================================
  ERROR: test_maaii (__main__.Android_Maaii)
  ----------------------------------------------------------------------
  Traceback (most recent call last):
    File "C:\Python34\testfiles\MaaiiTest_new.py", line 31, in tearDown
      self.driver.quit()
    File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 455, in quit
      self.execute(Command.QUIT)
    File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 173, in execute
      self.error_handler.check_response(response)
    File "C:\Python34\lib\site-packages\appium\webdriver\errorhandler.py", line 24, in check_response
      super(MobileErrorHandler, self).check_response(response)
    File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 138, in check_response
      if 'message' in value:
  TypeError: Type str doesn't support the buffer API
  
  ----------------------------------------------------------------------
  Ran 1 test in 47.363s
  
  FAILED (errors=2)
  </code></pre>
  
  <p>What is the real problem? I have tried all locate element methods but failed.</p>