title: Creating Xpath for an Android element without ID in java
body: <p>I have been searching for this issue for a while so I decided to create an account and ask this myself. This is my first post so I'll do my best.</p>
  
  <p>I want to fill three text fields in a certain screen. These fields do not have an id, index or content-desc. All the fields have the same class and package. The only detail they have is text. </p>
  
  <p>I'm using Genymotion, Appium and Selenium.</p>
  
  <p>This is my code:</p>
  
  <pre><code>package Steps;
  import cucumber.api.PendingException;
  import cucumber.api.java.After;
  import cucumber.api.java.Before;
  import cucumber.api.java.en.And;
  import cucumber.api.java.en.Given;
  import cucumber.api.java.en.Then;
  import cucumber.api.java.en.When;
  import io.appium.java_client.MobileElement;
  import io.appium.java_client.android.AndroidDriver;
  import io.appium.java_client.android.AndroidElement;
  import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.remote.CapabilityType;
  import org.openqa.selenium.remote.DesiredCapabilities;
  import org.openqa.selenium.remote.RemoteWebDriver;
  import org.testng.Assert;
  
  import java.net.MalformedURLException;
  import java.net.URL;
  import java.util.List;
  import java.util.concurrent.TimeUnit;
  
  
  public class MyStepdefs {
  
      AndroidDriver driver;
  
      @Before
      public void setUp() throws MalformedURLException {
          DesiredCapabilities capabilities = new DesiredCapabilities();
          capabilities.setCapability("deviceName", "192.168.150.101:5555");
          capabilities.setCapability("platformName", "Android");
          capabilities.setCapability("appPackage", "com.android.contacts");
          capabilities.setCapability("appActivity", "com.android.contacts.activities.PeopleActivity");
          driver = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
          driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
      }
  </code></pre>
  
  <p>So I want to add a new contact in my virtual device. I'm able to open the correct screen to add a new contact but now I need to fill in some text fields and this is where my problem starts.</p>
  
  <p>I want to use the sendKeys method for the following field:
  <a href="https://i.stack.imgur.com/371ib.jpg" rel="nofollow noreferrer">Screenshot of UiAutomatorViewer</a></p>
  
  <p>I tried the following Xpath:</p>
  
  <pre><code>MobileElement nameField = (MobileElement) driver.findElement(By.xpath("//android.widget.EditText[@text='Name']"));
      nameField.click();
      nameField.sendKeys("Test");
  </code></pre>
  
  <p>My Appium log:</p>
  
  <pre><code>    [HTTP] {"using":"xpath","value":"//android.widget.EditText[@text='Name']"}
  [W3C] Calling AppiumDriver.findElement() with args: ["xpath","//android.widget.EditText[@text='Name']","e8c8c5fc-0dbc-42b5-835d-f27b0a365a95"]
  [BaseDriver] Valid locator strategies for this request: xpath, id, class name, accessibility id, -android uiautomator
  [BaseDriver] Waiting up to 15000 ms for condition
  [AndroidBootstrap] Sending command to android: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.EditText[@text='Name']","context":"","multiple":false}}
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"xpath","selector":"//android.widget.EditText[@text='Name']","context":"","multiple":false}}
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: find
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Finding '//android.widget.EditText[@text='Name']' using 'XPATH' with the contextId: '' multiple: false
  [HTTP] &lt;-- POST /wd/hub/session/e8c8c5fc-0dbc-42b5-835d-f27b0a365a95/element - - ms - -
  [HTTP] 
  [HTTP] --&gt; DELETE /wd/hub/session/e8c8c5fc-0dbc-42b5-835d-f27b0a365a95
  [HTTP] {}
  [W3C] Calling AppiumDriver.deleteSession() with args: ["e8c8c5fc-0dbc-42b5-835d-f27b0a365a95"]
  [BaseDriver] Event 'quitSessionRequested' logged at 1530018954452 (15:15:54 GMT+0200 (W. Europe Daylight Time))
  [Appium] Removing session e8c8c5fc-0dbc-42b5-835d-f27b0a365a95 from our master session list
  [AndroidDriver] Shutting down Android driver
  [ADB] Running 'D:\Handleiding\SDK\platform-tools\adb.exe -P 5037 -s 192.168.150.101\:5555 shell am force-stop com.android.contacts'
  [ADB] Pressing the HOME button
  [ADB] Running 'D:\Handleiding\SDK\platform-tools\adb.exe -P 5037 -s 192.168.150.101\:5555 shell input keyevent 3'
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Failed to locate element. Clearing Accessibility cache and retrying.
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Finding '//android.widget.EditText[@text='Name']' using 'XPATH' with the contextId: '' multiple: false
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":7,"value":"No element found"}
  [AndroidBootstrap] Received command result from bootstrap
  [MJSONWP] Matched JSONWP error code 7 to NoSuchElementError
  [AndroidBootstrap] Sending command to android: {"cmd":"shutdown"}
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {"cmd":"shutdown"}
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type SHUTDOWN
  [AndroidBootstrap] Received command result from bootstrap
  [UiAutomator] Shutting down UiAutomator
  [UiAutomator] Moving to state 'stopping'
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {"status":0,"value":"OK, shutting down"}
  [AndroidBootstrap] [BOOTSTRAP LOG] [debug] Closed client connection
  [AndroidBootstrap] [UIAUTO STDOUT] INSTRUMENTATION_STATUS: numtests=1
  [AndroidBootstrap] [UIAUTO STDOUT] INSTRUMENTATION_STATUS: stream=.
  [AndroidBootstrap] [UIAUTO STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
  [AndroidBootstrap] [UIAUTO STDOUT] INSTRUMENTATION_STATUS: test=testRunServer
  [AndroidBootstrap] [UIAUTO STDOUT] INSTRUMENTATION_STATUS: class=io.appium.android.bootstrap.Bootstrap
  [UiAutomator] UiAutomator shut down normally
  [UiAutomator] Moving to state 'stopped'
  [ADB] Attempting to kill all uiautomator processes
  [ADB] Getting all processes with uiautomator
  [ADB] Running 'D:\Handleiding\SDK\platform-tools\adb.exe -P 5037 -s 192.168.150.101\:5555 shell ps'
  [ADB] No uiautomator process found to kill, continuing...
  [UiAutomator] Moving to state 'stopped'
  [Logcat] Stopping logcat capture
  [ADB] Running 'D:\Handleiding\SDK\platform-tools\adb.exe -P 5037 -s 192.168.150.101\:5555 shell am force-stop io.appium.unlock'
  [AndroidDriver] Not cleaning generated files. Add `clearSystemFiles` capability if wanted.
  [BaseDriver] Event 'quitSessionFinished' logged at 1530018960995 (15:16:00 GMT+0200 (W. Europe Daylight Time))
  [W3C] Received response: null
  [W3C] But deleting session, so not returning
  [W3C] Responding to client with driver.deleteSession() result: null
  [HTTP] &lt;-- DELETE /wd/hub/session/e8c8c5fc-0dbc-42b5-835d-f27b0a365a95 200 6545 ms - 14
  [HTTP] 
  </code></pre>
  
  <p>I also tried the easy way, same result:</p>
  
  <pre><code>driver.findElement(By.xpath("//android.widget.EditText[@text='Name']")).click();
  driver.findElement(By.xpath("//android.widget.EditText[@text='Name']")).sendKeys("Test");
  </code></pre>
  
  <p>And I even tried a List, same result:</p>
  
  <pre><code>List&lt;AndroidElement&gt; txtbox = driver.findElements(By.className("android.widget.EditText"));
  txtbox.get(0).sendKeys("Test");
  txtbox.get(1).sendKeys("0612345678");
  txtbox.get(2).sendKeys("test@testtest.test");
  </code></pre>
  
  <p>Please let me know if you have any suggestions to my post so I can edit it.</p>
  
  <p>Thanks in advance!</p>