Appium手機自動化測試模擬手勢的基本操作
這篇文章主要說明手機自動化測試如何模擬一些手勢動作與操作行為。
每一個操作動作也舉一小段Java程式範例說明。
建議手機自動化測試主要還是以功能性測試為主,
好不好用與流暢度等等最終還是需要人來判斷。
往下滑動
常見的是一個很長的 list。至時候螢幕常需要往下捲動時,就可以利用這個功能 scrollTo。
driver.scrollTo(“Text You See on the Screen“);
TouchAction ( Tap、Long Press、Release)
多半的手勢操作,包含multiple Touch 都透過 TouchAction 來達成。這個範例舉一個 Tab 與 Long press 的動作作為範例。
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
TouchAction t=new TouchAction(driver);
WebElement btn=driver.findElementById("com.AppName.android:id/Element_ID");
// Tap action
t.tap(btn).perform();
// Long press Action
t.longPress(btn).perform();
[/pastacode]
TouchAction 提供的其它動作還包含如下:
- press
- release
- moveTo
- tap
- wait
- longPress
- cancel
- perform
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md
利用 UiSelector 點擊看到的文字
UISelector 為 Appuim 特別提供的定位方式。假設 ID, ClassName 都不是很好的定位的話,就可以透過這個方式,直接定位看到的文字。
driver.findElementByAndroidUIAutomator(“new UiSelector().text(\”TextYouSeeOnScreen\”)”).click();
當無法用唯一的ID 定位時?
當許多的手機UI元件都沒有獨特的 ID 可以定位時,而且全部的 className 都相同時,那要怎樣定位呢?
我們就可以利用 findElementsByClassName
將所有的UI元件讀到陣列當中,在透過這個方式直接找到我們螢幕上看到的那個特定元件
btn.get(i).getText().contains(“TextYouSee_on_Screen”)
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
TouchAction t=new TouchAction(driver);
List <WebElement> btn=driver.findElementsByClassName("android.widget.TextView");
for(int i=0;i<btn.size();i++)
{
if(btn.get(i).getText().contains("TextYouSee_on_Screen"))
{
t.longPress(btn.get(i)).perform();
}
[/pastacode]
點擊 Android 特殊按鍵 “Home” “Back” “Lock”
Home 與 Back 按鍵要怎樣點呢?
- driver.sendKeyEvent(AndroidKeyCode.BACK);
- driver.sendKeyEvent(AndroidKeyCode.HOME);
- http://appium.github.io/java-client/io/appium/java_client/android/AndroidKeyCode.html
要如何 Lock 手機呢?
driver.lockScreen(3); https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/appium-bindings.md
往下/上捲動 Swipe
- MobileElement btn=(MobileElement)driver.findElementById(“com.AppName.android:id/element_ID”);
- btn.swipe(SwipeElementDirection.DOWN, 3000);
或是針對整個手機
driver.swipe(25, 40, 30, 30, 5000);
其中 5000表示整個從座標 25,40 移動到 30,30要花 5秒的時間完成。
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/appium-bindings.md
Drag and Drop
TouchAction tAction=new TouchAction(driver);
tAction.press(300,500).moveTo(600,500).release().perform();
Zoom In
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
@Test
public void testZoom(){
int scrHeight = driver.manage().window().getSize().getHeight(); //To get the mobile screen height
int scrWidth = driver.manage().window().getSize().getWidth();//To get the mobile screen width
MultiTouchAction multiTouch = new MultiTouchAction(driver);
TouchAction tAction0 = new TouchAction(driver);
TouchAction tAction1 = new TouchAction(driver);
//press finger center of the screen and then move y axis
tAction0.press(scrWidth/2,scrHeight/2).waitAction(1000).moveTo(0,60).release();
// press thumb slightly down on the center of the screen and then move y axis
tAction1.press(scrWidth/2,scrHeight/2+40).waitAction(1000).moveTo(0,80).release();
multiTouch.add(tAction0).add(tAction1);
multiTouch.perform();// now perform both the actions simultaneously (tAction0 and tAction1)
}
[/pastacode]
Alerts
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
@Test
public void testAlert(){
WebElement showAlert= driver.findElement(By.name("Show Alert"));
showAlert.click();// it will open the Alert box
WebElement yes=driver.findElement(By.name("Yes"));
yes.click();// Click on Yes button
}
[/pastacode]
Spinners
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
@Test
public void testSpinner(){
WebElement spinner=driver.findElement(By.id("android:id/text_ID"));
spinner.click();
// i.e. the Spinner is list of country options
driver.scrollToExact("Taiwan");
WebElement selected_option=driver.findElement(By.name("Taiwan"));
selected_option.click();
}
[/pastacode]
Slide bar
act.press(xAxisStartPoint,yAxis).moveTo(xAxisEndPoint-1,yAxis).release().perform();
[pastacode lang=”java” message=”” highlight=”” provider=”manual”]
@Test
public void testSlideBar(){
WebElement slider=driver.findElementById("com.android.androidui:id/seekBarID");
int xAxisStartPoint = slider.getLocation().getX();
int xAxisEndPoint = xAxisStartPoint + slider.getSize().getWidth();
int yAxis = slider.getLocation().getY();
TouchAction act=new TouchAction(driver);
//pressed x axis & y axis of seekbar and move seekbar till the end
act.press(xAxisStartPoint,yAxis).moveTo(xAxisEndPoint-1,yAxis).release().perform();
}
[/pastacode]