顯示具有 ios 標籤的文章。 顯示所有文章
顯示具有 ios 標籤的文章。 顯示所有文章

2014年11月24日 星期一

[Appium] Appium的元件定位方法

Appium元件的定位方法


wd.findElement(By.xpath(“xpath‘)); ,其中By有許多方式可以達成


By.xpath 絕對路徑  (Android、iOS)

主要用於完全無法定位的元件最後手段


Ex.
wd.findElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIAStaticText[11]"));


尋找方法:
使用Appium Inspector可以找到



By.name 名字  (iOS)
主要用於iOS RD寫app時有幫忙把元件標上名字時
Ex.
wd.findElement(By.name("topbar reload")).click();


尋找方法:
iOS在simulator中,Settings->Accessibility->Accessibility Inspector,
Appium Inspector也可以找到



By.id  resource ID  (Android)
主要用於Android RD有幫忙把元件標上名字時
Ex.
wd.findElement(By.id("com.myapp.test:id/url"));


尋找方法:
使用Android SDK中的hierarchy viewer,可使用含Android SDK的eclipse->DDMS->選擇Device->Dump hierarchy viewer


By.className 類別名稱  (Android、iOS)
用於從一個已知的節點,往下尋找沒有名子的特定類別的元件
尋找一個節點下面元件的方法:http://ffsonic.blogspot.tw/2014/11/appium.html


Ex.
Android:
wd.findElements(By.className("android.widget.TextView"));

iOS:
wd.findElement(By.className("UIASwitch")).click();



尋找方法:
Android - hierarchy viewer
iOS - Appium Inspector




ssss

2014年11月19日 星期三

[Appium] Appium跑iOS app的條件

大前提:台Mac的Xcode必須登入一個有iOS Development的帳號,不然連安裝app時都會失敗


1. 跑在simulator:
build app時必須額外加入simulator SDK

2.跑在device
必須有原始碼,開啟xcode -> Product -> Build For -> Testing
.app位置: /Users/Library/Developer/Xcode/DerivedData/workspace/Build/Products/Debug-iphones/

build app的電腦跟跑的電腦可以不一樣,只要apple id都有權限就可以

[Appium] Appium在device上launch app時不斷閃退又重開

iOS8以上可能遇到這個問題,到device settings裡面=>Developer=>enable UI Automation


2014年11月16日 星期日

[Appium] iOS點擊或滑動螢幕坐標報錯超出範圍

http://testerhome.com/topics/1589

滑動:從起始點X.Y 長按到結束點X.Y

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void ScrollDown(AppiumDriver wd) throws InterruptedException {
  JavascriptExecutor js = (JavascriptExecutor) wd;
  HashMap<String, Double> flickObject = new HashMap<String, Double>();
  // set start point and end point
  flickObject.put("startX", 300.0);
  flickObject.put("startY", 800.0);
  flickObject.put("endX", 300.0);
  flickObject.put("endY", 500.0);
  flickObject.put("duration", 500.0);
  //do action
  js.executeScript("mobile: flick", flickObject);
  Thread.sleep(delay);
 }


這邊有個坑,如果你是用Appium Inspector 找iOS中的一個坐標要滑動或是點擊,像是這樣的話


要注意! Appium Inspector的坐標是Device放大過後的坐標,而上面那語法是點擊最底層的logic screen,而不是被放大過後的Device screen

以iPad retina來說是放大兩倍,所以要把抓到的坐標/2,寫在code裡面,這樣點擊的坐標才會是正確的



原理:

http://www.iosres.com/

[Appium] 根據一個已找到的位置,往下尋找子結點

如果我的目標是這裡:
xpath: //UIAApplication[1]/UIAWindow[1]/UIATableView[1]/UIATableCell[6]/UIASwitch[1]
那code應該是這樣:
WebElement aa = wd.findElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATableView[1]"));
List<WebElement> bb= aa.findElements(By.className("UIATableCell"));
WebElement cc = bb.get(5);
WebElement dd = cc.findElement(By.className("UIASwitch"));

dd.click();
列出某一節點下面全部元素(不過無法顯示元素類別):

code:
List<WebElement> wblist= wd.findElements(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/*"));
System.out.println(wblist);
output:
[[[AppiumDriver: iOS on MAC (] -> xpath: //UIAApplication[1]/UIAWindow[1]/UIATableView[1]/*], [[AppiumDriver: iOS on MAC ()] -> xpath: //UIAApplication[1]/UIAWindow[1]/UIATableView[1]/*], [[AppiumDriver: iOS on MAC ()] -> xpath: //UIAApplication[1]/UIAWindow[1]/UIATableView[1]/*], [[AppiumDriver: iOS on MAC ()] -> xpath: //UIAApplication[1]/UIAWindow[1]/UIATableView[1]/*]]