1. 程式人生 > >Appium系列|常見API使用

Appium系列|常見API使用

這個小節主要會來介紹下Appium常見的API使用。上面幾節課已經介紹了一些API瞭如點選,通過定位方式定位到控制元件後呼叫click方法就可以對控制元件進行點選,還有獲取控制元件的文字,一樣是定位到控制元件後呼叫getText方法就可以獲取控制元件的文字。

接著我們來介紹下一些輸入框操作的API,如輸入、清空。可以通過測試程式碼切換到開源中國的登入頁面,可通過點選底部“我的”tab頁,然後點選登入按鈕可切換到登入介面,如下所示:

這時候如果要操作使用者名稱輸入框需要先定位到輸入框這個控制元件,可通過uiautomatorviewer檢視這個控制元件的屬性,可以看到這個控制元件是有id的,因此可以通過id來定位到該控制元件,然後通過sendKeys和clear方法方法來進行文字輸入和清空,具體測試程式碼如下:

package appium.chapter2;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.net.URL;

public class EditText {

   private AppiumDriver<WebElement> driver;

   @BeforeMethod
   public void setUp() throws Exception {
       //構造被測試應用的路徑
       File app = new File(System.getProperty("user.dir"), "AUT/osc.apk");
       //例項化DesiredCapabilities
       DesiredCapabilities capabilities = new DesiredCapabilities();
       //deviceName的值可以任意指定
       capabilities.setCapability("deviceName","My Device");
       //設定被測應用的絕對路徑
       capabilities.setCapability("app", app.getAbsolutePath());
       capabilities.setCapability("appPackage","net.oschina.app");
       //設定啟動類的資訊,這個資訊可以通過aapt dump bading apkname來獲得
       capabilities.setCapability("appActivity", ".AppStart");
       //初始化AppiumDriver
       driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
   }

   @Test
   public void testName() throws Exception {
       Thread.sleep(3000);
       //點選底部"我的"tab頁
       driver.findElement(By.id("net.oschina.app:id/nav_item_me")).click();
       //點選我的登入按鈕
       driver.findElement(By.id("net.oschina.app:id/iv_portrait")).click();
       //通過ID定位到輸入框控制元件
       WebElement name = driver.findElement(By.id("net.oschina.app:id/et_username"));
       //輸入文字
       name.sendKeys("
[email protected]
");        Thread.sleep(3000);        //清空輸入框        name.clear();    }    @AfterMethod    public void tearDown() throws Exception {        driver.quit();    } }

執行下指令碼可以發現往使用者名稱輸入資訊,接著又清空輸入框的資訊。

這時候可以將使用者名稱裡的郵箱改成任意的中文,可以執行下指令碼看下中文能不能被成功輸入。可以發現中文是沒辦法被成功輸入的,要輸入中文還需要在setUp裡新增一個capability資訊,如下:

     capabilities.setCapability("unicodeKeyboard",true);

完整程式碼如下:

package appium.chapter2;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.net.URL;

public class EditText {

   private AppiumDriver<WebElement> driver;

   @BeforeMethod
   public void setUp() throws Exception {
       //構造被測試應用的路徑
       File app = new File(System.getProperty("user.dir"), "AUT/osc.apk");
       //例項化DesiredCapabilities
       DesiredCapabilities capabilities = new DesiredCapabilities();
       //deviceName的值可以任意指定
       capabilities.setCapability("deviceName","My Device");
       //設定被測應用的絕對路徑
       capabilities.setCapability("app", app.getAbsolutePath());
       capabilities.setCapability("appPackage","net.oschina.app");
       //設定啟動類的資訊,這個資訊可以通過aapt dump bading apkname來獲得
       capabilities.setCapability("appActivity", ".AppStart");
       //通過新增如下設定來支援中文輸入
       capabilities.setCapability("unicodeKeyboard",true);
       //初始化AppiumDriver
       driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
   }

   @Test
   public void testName() throws Exception {
       Thread.sleep(3000);
       //點選底部"我的"tab頁
       driver.findElement(By.id("net.oschina.app:id/nav_item_me")).click();
       //點選我的登入按鈕
       driver.findElement(By.id("net.oschina.app:id/iv_portrait")).click();
       //通過ID定位到輸入框控制元件
       WebElement name = driver.findElement(By.id("net.oschina.app:id/et_username"));
       //輸入文字
       name.sendKeys("世界你好!");
       Thread.sleep(3000);
       //清空輸入框
       name.clear();
   }

   @AfterMethod
   public void tearDown() throws Exception {
       driver.quit();
   }
}

執行下上面的指令碼可以發現中文被成功輸入了,這裡要注意下添加了unicodeKeyboard會往手機或者模擬器安裝一個輸入法,然後將設定的輸入法設定為這個新安裝的輸入法,如果你手動要往輸入框輸入的話會發現輸入不了,需要去手機輸入法裡更改下預設的輸入法為其他的輸入法。

關注公眾號,獲取最新內容