gt:         WebElement sumLabel = driver.findElement(By.name("SumLabel"));
context: /**
   * Candybean is a next generation automation and testing framework suite.
   * It is a collection of components that foster test automation, execution
   * configuration, data abstraction, results illustration, tag-based execution,
   * top-down and bottom-up batches, mobile variants, test translation across
   * languages, plain-language testing, and web service testing.
   * Copyright (C) 2013 SugarCRM, Inc. <candybean@sugarcrm.com>
   *
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU Affero General Public License as
   * published by the Free Software Foundation, either version 3 of the
   * License, or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU Affero General Public License for more details.
   *
   * You should have received a copy of the GNU Affero General Public License
   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   */
  package com.sugarcrm.candybean.examples.mobile;
  
  import org.junit.After;
  import org.junit.Before;
  import org.junit.Test;
  import org.json.simple.JSONObject;
  import org.json.simple.parser.JSONParser;
  import org.apache.http.util.EntityUtils;
  import org.apache.http.HttpEntity;
  import org.apache.http.HttpResponse;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.WebElement;
  import org.openqa.selenium.Point;
  import org.openqa.selenium.interactions.HasTouchScreen;
  import org.openqa.selenium.Capabilities;
  import org.openqa.selenium.interactions.TouchScreen;
  import org.openqa.selenium.remote.CapabilityType;
  import org.openqa.selenium.remote.DesiredCapabilities;
  import org.openqa.selenium.remote.RemoteWebDriver;
  import org.openqa.selenium.remote.RemoteTouchScreen;
  import org.openqa.selenium.interactions.touch.TouchActions;
  
  import java.net.URL;
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Random;
  
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertTrue;
  
  /**
   * Simple <a href="https://github.com/appium/appium">Appium</a> test which runs against an appium server deployed
   * with a 'TestApp' Android project.
   *
   * @author Larry Cao
   */
  public class AppiumAndroidTest {
  
      private WebDriver driver;
  
      private List<Integer> values;
  
      private static final int MINIMUM = 0;
      private static final int MAXIMUM = 10;
  
      @Before
      public void setUp() throws Exception {
          // set up appium
          DesiredCapabilities capabilities = new DesiredCapabilities();
          capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
          capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
  
          capabilities.setCapability("device", "Android");
          capabilities.setCapability(CapabilityType.PLATFORM, "Mac");
          capabilities.setCapability("app", "https://s3.amazonaws.com/voodoo2/TestApp.apk.zip");
          capabilities.setCapability("app-package", "com.example.TestApp");
          capabilities.setCapability("app-activity", "MyActivity");
  
          driver = new SwipeableWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
          values = new ArrayList<>();
      }
  
      @After
      public void tearDown() throws Exception {
          driver.quit();
      }
  
      private void populate() {
          //populate text fields with two random number
          List<WebElement> elems = driver.findElements(By.tagName("EditText"));
          Random random = new Random();
          for (WebElement elem : elems) {
              int rndNum = random.nextInt(MAXIMUM - MINIMUM + 1) + MINIMUM;
              elem.sendKeys(String.valueOf(rndNum));
              values.add(rndNum);
          }
      }
  
      @Test
      public void testUIComputation() throws Exception {
          // populate text fields with values
          populate();
          // trigger computation by using the button
          WebElement button = driver.findElement(By.tagName("Button"));
          button.click();
          // is sum equal ?
          WebElement texts = driver.findElement(By.tagName("text"));
          assertEquals(texts.getText(), String.valueOf(values.get(0) + values.get(1)));
      }
  
      @Test
      public void testActive() throws Exception {
          WebElement text = driver.findElement(By.xpath("//textfield[1]"));
          assertTrue(text.isDisplayed());
  
          WebElement button = driver.findElement(By.xpath("//button[1]"));
          assertTrue(button.isDisplayed());
      }
  
      @Test
      public void testBasicAlert() throws Exception {
          driver.findElement(By.xpath("//button[2]")).click();
  //
  //        Alert alert = driver.switchTo().alert();
  //
  //        alert.accept();
          WebElement acceptButton = driver.findElement(By.xpath("//button[1]"));
  
          acceptButton.click();
  
      }
  
  //    @Test
  //    public void testBasicTagName() throws Exception {
  //        WebElement text = driver.findElement(By.xpath("//text[2]"));
  //        assertEquals(text.getTagName(), "UIATextField");
  //    }
  
      @Test
      public void testBasicButton() throws Exception {
          WebElement button = driver.findElement(By.xpath("//button[1]"));
          assertEquals(button.getText(), "Compute Sum");
      }
  
      @Test
      public void testClear() throws Exception {
          WebElement text = driver.findElement(By.xpath("//textfield[1]"));
          text.sendKeys("12");
          text.clear();
  
          assertEquals(text.getText(), "");
      }
  
  //    @Test
  //    public void testHideKeyboard() throws Exception {
  //        driver.findElement(By.xpath("//textfield[1]")).sendKeys("12");
  //
  //        WebElement button = driver.findElement(By.name("Done"));
  //        assertTrue(button.isDisplayed());
  //
  //        button.click();
  //    }
  
      @Test
      public void testFindElementByTagName() throws Exception {
          Random random = new Random();
  
          WebElement text = driver.findElement(By.tagName("textfield"));
          int number = random.nextInt(MAXIMUM - MINIMUM + 1) + MINIMUM;
          text.sendKeys(String.valueOf(number));
  
          driver.findElement(By.tagName("button")).click();
  
          // is sum equal ?
          WebElement sumLabel = driver.findElement(By.tagName("text"));
          assertEquals(sumLabel.getText(), String.valueOf(number));
      }
  
      @Test
      public void testFindElementsByTagName() throws Exception {
          Random random = new Random();
  
          WebElement text = driver.findElements(By.tagName("textfield")).get(1);
  
          int number = random.nextInt(MAXIMUM - MINIMUM + 1) + MINIMUM;
          text.sendKeys(String.valueOf(number));
  
          driver.findElements(By.tagName("button")).get(0).click();
  
          // is sum equal ?
          WebElement texts = driver.findElements(By.tagName("text")).get(0);
          assertEquals(texts.getText(), String.valueOf(number));
      }
  
      @Test
      public void testFindElementByName() throws Exception {
          Random random = new Random();
  
          WebElement text = driver.findElement(By.name("TextField1"));
  
          int number = random.nextInt(MAXIMUM - MINIMUM + 1) + MINIMUM;
          text.sendKeys(String.valueOf(number));
  
          // is sum equal ?
  