| Университет ИТМО 
 Лабораторная работа №4 по дисциплине
 
 «Тестирование ПО»
 
 Выполнил:
 
 студент 3-го курса
 
 группы 3125
 
 Припадчев Артём
 
 Санкт-Петербург
 
 2015
 
 Постановка задачи
 
 
            Изучить методику функционального тестирования Android приложения, используя Appium.
 
Необходимо взять приложение согласно варианту, установить симулятор Genymotion, настроить Appium (http://appium.io) и написать 5 тестовых сценариев. Сценарий установки виджета на экран обязателен.
 
 Вариант 5: Twitter
 
 
 
              
              
              
                | ID
 
 | 1
 
 |  
                | Название
 
 | Android / Вход в несуществующий аккаунт
 
 |  
                | Автор
 
 | Артём Припадчев
 
 |  
                | Краткое
 
 описание (цель)
 
 | Вход в несуществующий аккаунт
 
 |  
                | Начальные условия
 
 | 
                    Twitter открыт
 
 |  
                | Пошаговые инструкции
 
 | 
                    Нажать на кнопку “Log in”
 
В поле логин ввести lol@mail.ru
 
В поле пароль ввести 123456
 
Нажать на кнопку “Log in”
 
 |  
                | Критерий прохождения
 
 | Показывается сообщения, что такого аккаунта не существует. Вход не выполнен.
 
 |  
                | Примечания
 
 | 
 
 
 |  
 
 
 
              
              
              
                | ID
 
 | 2
 
 |  
                | Название
 
 | Android / Large widget
 
 |  
                | Автор
 
 | Артём Припадчев
 
 |  
                | Краткое
 
 описание (цель)
 
 | Установка большого виджета
 
 |  
                | Начальные условия
 
 | 
                    Открыт рабочий стол Android
 
 |  
                | Пошаговые инструкции
 
 | 
                    Перейти в меню приложений
 
Перейти на вкладку Widgets
 
Найти в списке Twttter (large)
 
Долгим тапом зажать виджет
 
На рабочем столе отпустить виджет
 
 |  
                | Критерий прохождения
 
 | Виджет появился на рабочем столе
 
 |  
                | Примечания
 
 | 
 
 
 |  
 
 
 
              
              
              
                | ID
 
 | 3
 
 |  
                | Название
 
 | Android / Вход в существующий аккаунт
 
 |  
                | Автор
 
 | Артём Припадчев
 
 |  
                | Краткое
 
 описание (цель)
 
 | Вход в существующий аккаунт
 
 |  
                | Начальные условия
 
 | 
                    Twitter открыт
 
 |  
                | Пошаговые инструкции
 
 | 
                    Нажать на кнопку “Log in”
 
Ввести логин и пароль существующей учетной записи
 
Нажать на кнопку “Log in”
 
 |  
                | Критерий прохождения
 
 | Осуществляется вход в приложение.
 
 |  
                | Примечания
 
 | 
 
 
 |  
 
 
              
              
              
                | ID
 
 | 4
 
 |  
                | Название
 
 | Android / Поиск / Получение результатов
 
 |  
                | Автор
 
 | Артём Припадчев
 
 |  
                | Краткое
 
 описание (цель)
 
 | Проверка работы поиска в приложении
 
 |  
                | Начальные условия
 
 | 
                    Twitter открыт
 
Осуществлен вход в аккаунт
 
 |  
                | Пошаговые инструкции
 
 | 
                    Нажать на иконку поиска
 
Ввести любой текст
 
Нажать Enter
 
 |  
                | Критерий прохождения
 
 | Показаны результаты поиска по запросу
 
 |  
                | Примечания
 
 | 
 
 
 |  
 
 
 
              
              
              
                | ID
 
 | 5
 
 |  
                | Название
 
 | Android / Выход из учетной записи
 
 |  
                | Автор
 
 | Артём Припадчев
 
 |  
                | Краткое
 
 описание (цель)
 
 | Проверка выхода из учетной записи
 
 |  
                | Начальные условия
 
 | 
                    Twitter открыт
 
Осуществлен вход в аккаунт
 
 |  
                | Пошаговые инструкции
 
 | 
                    Перейти в меню приложения (кнопка с изображением трех вертикально расположенных точек)
 
Выбрать Settings
 
Выбрать свою учетную запись
 
Выбрать Log out, в всплывающем окне нажать OK
 
 |  
                | Критерий прохождения
 
 | Осуществлен выход из аккаунта
 
 |  
                | Примечания
 
 | 
 
 
 |  
 Исходные коды
 
 package twitterTestPack;
 import java.net.MalformedURLException;
 
 import java.net.URL;
 
 import java.util.List;
 
 import java.io.File;
 import org.openqa.selenium.By;
 
 import org.openqa.selenium.Dimension;
 
 import org.openqa.selenium.WebElement;
 
 import org.openqa.selenium.remote.CapabilityType;
 
 import org.openqa.selenium.remote.DesiredCapabilities;
 
 import org.junit.*;
 import io.appium.java_client.AppiumDriver;
 
 import io.appium.java_client.TouchAction;
 
 import io.appium.java_client.android.AndroidDriver;
 public class startApp {
 private AppiumDriver driver;
 
 WebElement element;
 @Before
 
 public void setUp() throws MalformedURLException{
 File classpathRoot = new File(System.getProperty("user.dir"));
 
 File appDir = new File(classpathRoot, "/Twitter");
 
 File app = new File(appDir, "com.twitter.android-2.apk");
 DesiredCapabilities capabilities = new DesiredCapabilities();
 
 capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
 
 capabilities.setCapability("platformName", "Android");
 
 capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
 
 capabilities.setCapability("deviceName", "192.168.202.101:5555");
 
 capabilities.setCapability("app", app.getAbsolutePath());
 
 capabilities.setCapability("appPackage", "com.twitter.android");
 
 capabilities.setCapability("appActivity", ".StartActivity");
 
 driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 
 }
 
 @After
 
 public void aftertest() {
 
 driver.quit();
 
 }
 
 @Test
 
 public void installLargeWidget() throws Exception {
 System.out.println("Starting test " + new Object(){}.getClass().getEnclosingMethod().getName());
 
 driver.navigate().back();
 
 element = driver.findElement(By.name("Apps"));
 
 element.click();
 
 element = driver.findElement(By.name("Widgets"));
 
 element.click();
 
 boolean exit = false;
 
 while(!exit)
 
 {
 
 element = null;
 
 try
 
 {
 
 element = driver.findElement(By.name("Twitter (large)"));
 
 }
 
 catch (Exception ex){}
 
 if(element==null)
 
 {
 
 Dimension size = driver.manage().window().getSize();
 
 int startx = (int) (size.width * 0.8);
 
 int endx = (int) (size.width * 0.20);
 
 int starty = size.height / 2;
 
 driver.swipe(startx, starty, endx, starty, 1000);
 
 }
 
 else exit = true;
 
 }
 
 TouchAction action = new TouchAction(driver);
 
 action.longPress(element).release().perform();
 
 System.out.println("Ending test " + new Object(){}.getClass().getEnclosingMethod().getName());
 }
 
 @Test
 
 public void invalid_LogIn() throws Exception {
 
 System.out.println("Starting test " + new Object(){}.getClass().getEnclosingMethod().getName());
 
 element = driver.findElement(By.name("Log in"));
 
 element.click();
 
 List textFieldsList = driver.findElementsByClassName("android.widget.EditText");
 
 textFieldsList.get(0).sendKeys("lol@mail.ru");
 
 textFieldsList.get(1).sendKeys("123456");
 
 element = driver.findElement(By.name("Log in"));
 
 element.click();
 
 Thread.sleep(3000);
 
 try
 
 {
 
 element = driver.findElement(By.name("Log in"));
 
 Assert.assertNotNull(element);
 
 }
 
 catch(Exception e){
 
 Assert.fail();
 
 }
 
 System.out.println("Ending test " + new Object(){}.getClass().getEnclosingMethod().getName());
 
 }
 
 }
 package twitterTestPack;
 import java.net.MalformedURLException;
 
 import java.net.URL;
 
 import java.util.List;
 
 import java.io.File;
 import org.openqa.selenium.By;
 
 import org.openqa.selenium.Dimension;
 
 import org.openqa.selenium.WebElement;
 
 import org.openqa.selenium.remote.CapabilityType;
 
 import org.openqa.selenium.remote.DesiredCapabilities;
 
 import org.junit.*;
 import io.appium.java_client.AppiumDriver;
 
 import io.appium.java_client.TouchAction;
 
 import io.appium.java_client.android.AndroidDriver;
 public class LogIn {
 private AppiumDriver driver;
 
 WebElement element;
 @Before
 
 public void setUp() throws MalformedURLException{
 File classpathRoot = new File(System.getProperty("user.dir"));
 
 File appDir = new File(classpathRoot, "/Twitter");
 
 File app = new File(appDir, "com.twitter.android-2.apk");
 DesiredCapabilities capabilities = new DesiredCapabilities();
 
 capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
 
 capabilities.setCapability("platformName", "Android");
 
 capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
 
 capabilities.setCapability("deviceName", "192.168.202.101:5555");
 
 capabilities.setCapability("app", app.getAbsolutePath());
 
 capabilities.setCapability("appPackage", "com.twitter.android");
 
 capabilities.setCapability("appActivity", ".StartActivity");
 
 driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 
 }
 
 @After
 
 public void aftertest() {
 
 driver.quit();
 
 }
 
 @Test
 
 public void valid_LogIn() throws Exception {
 
 System.out.println("Starting test " + new Object(){}.getClass().getEnclosingMethod().getName());
 
 element = driver.findElement(By.name("Log in"));
 
 element.click();
 
 List textFieldsList = driver.findElementsByClassName("android.widget.EditText");
 
 textFieldsList.get(0).sendKeys("GetViruses@gmail.com");
 
 textFieldsList.get(1).sendKeys("*********");
 
 element = driver.findElement(By.name("Log in"));
 
 element.click();
 
 Thread.sleep(3000);
 
 try
 
 {
 
 element = driver.findElement(By.name("Log in"));
 
 Assert.assertNull(element);
 
 }
 
 catch(Exception e){
 
 }
 
 System.out.println("Ending test " + new Object(){}.getClass().getEnclosingMethod().getName());
 
 }
 
 }
 package twitterTestPack;
 import java.net.MalformedURLException;
 
 import java.net.URL;
 
 import java.util.List;
 
 import java.io.File;
 import org.openqa.selenium.By;
 
 import org.openqa.selenium.Dimension;
 
 import org.openqa.selenium.WebElement;
 
 import org.openqa.selenium.remote.CapabilityType;
 
 import org.openqa.selenium.remote.DesiredCapabilities;
 
 import org.junit.*;
 import io.appium.java_client.AppiumDriver;
 
 import io.appium.java_client.TouchAction;
 
 import io.appium.java_client.android.AndroidDriver;
 
 import io.appium.java_client.*;
 public class SearchTests {
 
 private AppiumDriver driver;
 
 WebElement element;
 
 @Before
 
 public void setUp() throws MalformedURLException{
 File classpathRoot = new File(System.getProperty("user.dir"));
 
 File appDir = new File(classpathRoot, "/Twitter");
 
 File app = new File(appDir, "com.twitter.android-2.apk");
 DesiredCapabilities capabilities = new DesiredCapabilities();
 
 capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
 
 capabilities.setCapability("platformName", "Android");
 
 capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
 
 capabilities.setCapability("deviceName", "192.168.202.101:5555");
 
 capabilities.setCapability("app", app.getAbsolutePath());
 
 capabilities.setCapability("appPackage", "com.twitter.android");
 
 capabilities.setCapability("appActivity", ".StartActivity");
 
 driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 
 try{
 
 driver.findElement(By.name("Don't allow")).click();
 
 }
 
 catch(Exception e){}
 
 }
 
 //@After
 
 public void aftertest() {
 
 driver.quit();
 
 }
 
 @Test
 
 public void getSearchResults() throws Exception
 
 {
 
 driver.findElement(By.name("Search")).click();
 
 element = driver.findElement(By.name("Search Twitter"));
 
 element.sendKeys("text \n");
 
 Thread.sleep(3000);
 
 element = driver.findElement(By.name("All Tweets"));
 
 Assert.assertNotNull(element);
 
 }
 
 }
 package twitterTestPack;
 import java.net.MalformedURLException;
 
 import java.net.URL;
 
 import java.util.List;
 
 import java.io.File;
 import org.openqa.selenium.By;
 
 import org.openqa.selenium.Dimension;
 
 import org.openqa.selenium.WebElement;
 
 import org.openqa.selenium.remote.CapabilityType;
 
 import org.openqa.selenium.remote.DesiredCapabilities;
 
 import org.junit.*;
 import io.appium.java_client.AppiumDriver;
 
 import io.appium.java_client.TouchAction;
 
 import io.appium.java_client.android.AndroidDriver;
 
 import io.appium.java_client.*;
 public class LogOut {
 
 private AppiumDriver driver;
 
 WebElement element;
 
 @Before
 
 public void setUp() throws MalformedURLException{
 File classpathRoot = new File(System.getProperty("user.dir"));
 
 File appDir = new File(classpathRoot, "/Twitter");
 
 File app = new File(appDir, "com.twitter.android-2.apk");
 DesiredCapabilities capabilities = new DesiredCapabilities();
 
 capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
 
 capabilities.setCapability("platformName", "Android");
 
 capabilities.setCapability(CapabilityType.VERSION, "4.2.2");
 
 capabilities.setCapability("deviceName", "192.168.202.101:5555");
 
 capabilities.setCapability("app", app.getAbsolutePath());
 
 capabilities.setCapability("appPackage", "com.twitter.android");
 
 capabilities.setCapability("appActivity", ".StartActivity");
 
 driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 
 try{
 
 driver.findElement(By.name("Don't allow")).click();
 
 }
 
 catch(Exception e){}
 
 }
 
 //@After
 
 public void aftertest() {
 
 driver.quit();
 
 }
 
 @Test
 
 public void logOut() throws Exception
 
 {
 
 driver.findElement(By.name("More")).click();
 
 driver.findElement(By.name("Settings")).click();
 
 driver.findElement(By.name("@ArtemVirused")).click();
 
 driver.findElement(By.name("Log out")).click();
 
 driver.findElement(By.name("OK")).click();
 
 //Thread.sleep(5000);
 
 try{
 
 element = driver.findElement(By.name("Sign up"));
 
 System.out.println("ОК");
 
 Assert.assertNotNull(element);
 
 }
 
 catch(Exception e){
 
 Assert.fail();
 
 }
 
 }
 
 //@Test
 
 public void writeTweet() throws Exception
 
 {
 
 element = driver.findElement(By.name("What's happening?"));
 
 element.click();
 
 element = driver.findElement(By.name("What's happening?"));
 
 element.click();
 
 element.sendKeys("TestTweet");
 
 Thread.sleep(1000);
 
 }
 
 }
 package twitterTestPack;
 import org.junit.runner.RunWith;
 
 import org.junit.runners.Suite;
 
 import org.junit.runners.Suite.SuiteClasses;
 @RunWith(Suite.class)
 
 @SuiteClasses({ startApp.class, LogIn.class, SearchTests.class, LogOut.class })
 
 public class AllTests {
 }
 |