2014-10-02 10 views
5

Android uygulamamı Appium framework kullanarak test ediyorum. Görünümleri için ids olmayan bir android ekranım var (ve ben eklemek istemiyorum ...), bu yüzden Xpath kullanmayı düşündüm. Appilite kullanarak android öğesi için xpath tanımlamak gerekiyor

Aşağıdaki çalıştı - I (onaltı öğeleri kırmızı olarak işaretlenmiştir) tüm göreli düzenlerini almak istiyorum enter image description here

:

ekran UI Otomatikleştirici Görüntüleyici içinde nasıl göründüğünü

budur

List<WebElement> webElementslist = 
mAppDriver.findElementsByXPath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ViewAnimator[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[2]"); 

Ancak hiçbir öğe almadım.

Web'de arama yaptım ve bir sonraki xpath öğreticilerini buldum, daha fazla seçenek denedim, ancak yine de başarıya ulaşmadım.

http://www.w3.org/TR/xpath/

http://www.zvon.org/comp/r/tut-XPath_1.html#intro

herhangi bir yardım seviniriz.

+0

, nasıl hakkında çok ayrıntılı görünüyor bunun gibi bir şey: '// LinearLayout [TextView]/LinearLayou t/LinearLayout/RelativeLayout'? (Ben appath XPath aşina değilim) – har07

+0

Hala iyi, bana sıfır öğeleri veren. Yine hiç sonuç vermeden daha az ayrıntılı çalıştım. –

+0

Eğer Ben ise, sadece bir şey döndüren basit bir XPath ile başlıyorum ve daha sonra sadece istediğim öğeleri geri getirmek için daha ince ayar yapmam gerekiyordu. //android.widget.LinearLayout [android.widget.TextView] 'veya hatta // android.widget.TextView' bir şey döndürüyor mu? – har07

cevap

5

Şu anda Android'de XPath ile gördüğünüz davranışları açıklayan bir kaç kötü böcek var. Bunlar maalesef 1.3.1 release

    Kök düğümler arama yapamazsınız
  1. .. link
    • düzeltilmesi planlanan bu bir ayrıntılı xpath xpath (cinas) başarı
    • muhtemeldir anlamına gelir
  2. bazen sadece varken bir elementin 240 olsun 16 link

İdeali, 16 RelativeLayout s android.widget.LinearLayout ebeveynin kaynak kimliği için görünebilir ve sonra böyle bir şey yapmak: Eğer düzenleri a birini verdi çünkü

//android.widget.LinearLayout[@resource-id="foo"]/android.widget.RelativeLayout 

Kişisel ayrıntılı çözüm işe yaramadı [2]'un pozisyonu.

Burada, sabittir:

//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ViewAnimator[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.RelativeLayout 

.... İlk çözüm kullanın lütfen.

Henüz UiAutomator bulucu bir strateji kullanarak sorunun çözümü içine bakarak, ancak hiçbir cevap ediyorum akılda

+1

Cevabınız için teşekkürler, ilk çözümünüzü deneyeceğim, belki sorunumu çözecek. –

+0

Bir yazım hatası yaşadım. Konumlayıcıdaki kaynak kimliğinizin etrafında çift tırnak işareti gerekir. Genellikle yer belirleyicilerinizi Appium için nasıl test ediyorsunuz? – sheeptest

+0

Genellikle kaynak konumumu kullanarak konumlandırıcılarımı test ediyorum, ancak sorun bu ekranın normal bir Android ekranı olmadığı, json'dan oluşturulduğu. Kimlik eklerken onları UI Automator Viewer'da göremiyorum. Bu yüzden yeni bir şey eklemek istemiyorum, ama olduğu gibi test et. –

1

tutarak gerçeği (.fromChild() ve .fromParent() kırılacak gibi görünüyor çünkü) o //foo[1] döner tüm foo düğümleri bir ebeveyni (değil foo düğümün ilk çocuk) ilk çocukları böyle bir şey deneyin:

//ScrollView/LinearLayout/LinearLayout[2]/LinearLayout/RelativeLayout

test edilmedi, ama size LinearLayout çocuğu olan tüm RelativeLayouts vermelidir Bir LinearLayout'un bir çocuğu olan bir LinearLayout'un ikinci çocuğu olan bir ScrollView'ın çocuğu olan çocuk.

0

Hemen u erişebilir bu deneyin kolayca

driver.findElement(By.xpath("//*[@class='android.widget.FrameLayout' and @bounds='[418,564][780,885]']")).click(); 
Aşağıdaki kod benim için çalıştı

Screenshot of UI