2016-08-08 2 views
0

기본 Android 앱에서 탐색 창으로 어려움을 겪고 있습니다.Appium은 Java에서 특정 값을 가진 자식 요소를 찾습니다.

서랍에 11 개의 요소가 있으며, 나머지 9 개는 표시되며 나머지는 스크롤해야합니다. 두번째 이미지 뷰 - - 텍스트 뷰 소자

Appium Inspector view

이러한 요소는 제 2 개 하위 요소를 포함한다. 내가하고 싶은 것을

Appium Inspector view

는 특정 이름을 가진 요소에 대한 검색에서 볼 수 서랍 요소를 반복하고 요소가 보이지 않는 경우 다음 그것을 활용할 수있는 방법을 만드는 것입니다, 나는 스크롤 서랍을 아래로/위로 누른 다음 반복을 반복하십시오.

textView 요소를 반복 할 때 for 루프가 필요합니다. 텍스트 속성을 사용하여 필요한 텍스트를 찾은 다음이 textView의 부모 요소를 클릭하십시오.

그러나 xpath 및 Appium을 사용하여 요소를 제대로 찾지 못해서 문제가 발생했습니다.

아무도 나를 통해 동적으로 xpath를 지정하는 방법을 이해할 수 있도록 요소를 반복 할 수 있습니까?

감사합니다.

답변

0

다음과 같은 방법을 시도해 볼 수 있습니다. Selenium과 Appium과 함께 PageObject 모델을 사용합니다. Xpath보다는 uiAutomator를 이용합니다. 그냥 신속하고 더러운 사용하여 XPath는, (일부 조립이 필요할 수 있습니다) 같은 무언가하려는 경우

public class PageObjectXYZ { 

    private AndroidDriver driver; 

    @AndroidFindBy(uiAutomator = "new UiSelector().className("android.widget.TextView")") 
    private List<MobileElements> someTextViews; 

    public PageObjectXYZ(AndroidDriver driver) { 
     this.driver = driver; 
     PageFactory.initElements(new AppiumFieldDecorator(driver), this); 
    } 

    public void clickTheOneIWant(String option){ 
     for(MobileElement me: someTextViews){ 
      if(me.getAttribute("text").equals(option)){ 
       this.driver.tap(1, me, 1000); 
       break; 
      } 
     } 
    } 
} 

:

String x = "//RecyclerView/RelativeLayout/RelativeLayout/TextView"; 
String y = "//RecyclerView/RelativeLayout/RelativeLayout"; 

Android driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), desiredCapabilities); 

Arraylist<MobileElements> arrayTextViews = driver.findElementsByXpath(x); 
Arraylist<MobileElements> arrayParentElements = driver.findElementsByXpath(y); 

for(int i = 0; i < arrayTextViews.size(); i++){ 
    if(arrayTextViews.get(i).getText().equals("text I want")){ 
     arrayParentElements.get(i).click(); 
    } 
} 
+0

안부에서 동적으로 –

+0

을 XPath를 이해하기를, "//"는에 의미 XML의 어느 곳에서나 시작하십시오. 루트 요소에서 정적 경로를 사용하려면 "/"로 시작하십시오. 첫 번째로 이동할 요소를 지정하려고합니다. 예를 들어 최상위 루트 요소를 볼 수 없으며 아마도 "/ DrawerLayout"입니다. "// RecyclerView"를 사용하여 xpath를 시작하여 문서를 더 시작할 수 있습니다. 그런 다음 "/"를 사용하여 요소를 내립니다. "// RecyclerView/RelativeLayout [1]은 첫 번째 RelativeLayout 요소를 반환합니다. 원하는 매개 변수를 항상 추가 할 수 있습니다. Ex/// TextView [text() = 'foo'] –

+0

감사합니다. // TextView [text() = 'foo']와 같은 xpath에 매개 변수를 추가하는 방법에 대한 자세한 내용은 어디서 볼 수 있습니까? xpath 또는 다른 로케이터를 사용하여 하위 요소의 부모 요소를 찾는 방법이 있습니까? – SergioLeone

관련 문제