UISelector

1 기본적인 방법 UiSelector

UiSelector 개체가 상태 객체로서 이해 될 수 있고, 그것에서 UIObject와 조건이 규정 된 제어 대상을하는데 사용할 수있는 기술.

모든 방법을 공개하고, 객체 UiSelector 클래스를 반환합니다.

텍스트 방식 측면 :

  1.text (문자열 텍스트) 텍스트

  포함 2.textContains (문자열 텍스트) 텍스트

  3.textMatches (문자열 정규식) 일반 텍스트

  4.textStartsWith (문자열 텍스트) 텍스트 문자 시작

방법은 측면을 설명 :

  명칭과 (문자열 내림차순) 설명

  2.descriptionContains (문자열 내림차순)의 설명을 포함

  3.descriptionMatches (문자열 정규식)이 규칙을 설명합니다

  4.descriptionStartsWith (문자열 내림차순)는 문자를 시작 바와

수업 방법 측면의 이름 :

  1.childSelector (UiSelector 선택기) 子 类

  2.className (문자열 클래스 명) 类 名

 간단하게, 방법의 측면의 예 :

  1.index (INT 인덱스) 번호

  2.instance (INT의 instantce) 색인

 독특한 속성 :

  1.checked (부울 발) 속성을 선택합니다

  2.chickable (부울 발) 속성 클릭

  3.enabled (부울 발)는 属性 가능

  4.focusable (부울 브로)의 초점 특성

  5.longClickable (부울 발)을 눌러 속성

  6.scrollable (부울 브로) 스크롤 속성

  7.selected (부울 발) 속성을 선택합니다

 패키지의 방법 이름 측면 :

  1.packageName (문자열 이름) 包 名

  2.packageNameMatches (문자열 정규식) 包 名 正 则

 자원 방법 ID :

  1.resourceId (문자열 ID) 리소스 ID

  2.resourceIdMatches (문자열 정규식) 일반 자원 ID

 문자 메시지를 통해 2. 위치

결국, 가장 일반적인 방법해야 컨트롤의 컨트롤의 텍스트 속성을 배치하여, 모바일 애플리케이션의 제한된 화면 크기는 정말 반복이, 다른 타겟팅 방법의 약어 오류를 추가 할 수 있습니다 경우에도 텍스트를 반복 할 가능성이 크기가 아닌있다.

2.1 UISelector.text 방법
addNote에서 UIObject 새로운 새 (새 새 UiSelector () 텍스트 ( "추가 메모").) =;
AssertEquals (addNote.getText (), "추가 메모");
직접 의한 방법은 현재 인터페이스의 모든 컨트롤을 찾을 수 같은 위치 제어에 대한 기대 값 여부를 각 컨트롤의 텍스트 속성을 비교, 매우 잘 이해하고, 그래서 자세히 설명 할 필요가 없다.
2.2 UISelector.textContains 방법.
AddNote에서 UIObject 새로운 새 = (새로운 새 UiSelector () textContains ( "추가").)
assertEquals (addNote.getText () "추가 참고")
이 방법은 상기 방법과 유사하지만, 입력 제어를 필요로하지 않는다 모든 텍스트 정보를 제공합니다.
2.3 UISelector.textStartsWith 방법
addNote에서 UIObject 새로운 새 = (새 새 UiSelector () textStartsWith ( "추가").)
assertEquals (addNote.getText (), "추가 참고");
예상 여부 이름이 의미는, 텍스트 및 제어의 시작에 의해 결정된다 문자열 일치 개인적으로 내가 거기에이 방법의 필요성이다가 다음과 같은 정규 표현식을 대체하기 위해 위의 방법 또는 방법을 사용하여 기능 할 수있는만큼 강하지 않은 느낌, 사실, 제어를 얻을 수 있습니다. 당신이 textEndWith의 방법을 제공하지 않는 이유 그리고 지금 당신이 textStartsWith 방법을 제공하는, 그것을 할 수 있습니다!
2.4 UISelector.textMatches 방법
= 새로운 새로운에서 UIObject addNote (. UiSelector 새 새 () textMatches ( "^ 추가 *."));
assertEquals (addNote.getText (), "추가 참고");
이 컨트롤에 텍스트를 비교하는 정규 표현식 방법입니다 "설정 검색 기준과 일치하는 : 위치 결정 제어, 여기에는 정규 표현식이 방법의 공식 설명을 참조 사용자를 제한하는 것이 흥미 롭다 보이는 텍스트가 예를 들어, 텍스트 레이블이를 시작합니다 (위젯 표시 응용 프로그램). 위젯의 텍스트는 사용자의 입력 인수 "의 문자열과 정확히 일치해야합니다. 우리는 첫 문장을 무시하지 않는, 키, 두 번째 문장으로 변환 "대상 컨트롤 텍스트 (모든 내용) 긍정적이어야하고 우리는 표현 일치를 입력합니다." 그것은 무엇을 의미 하는가? 텍스트의 제어 비교하여 얻은 계약의 일환으로하지 일반적인 정규 표현식처럼 할 것을 의미한다. 다음 코드 예제 :
addNote에서 UIObject 새로운 새 = (. 새로운 새로운 UiSelector () textMatches ( "^ 추가"));
assertEquals (addNote.getText (), "추가 참고");
일반적으로이 정규 표현식은 아무 문제 없다 그것은 당신이하고 싶은 것을 의미한다 "컨트롤이 추가 텍스트의 시작 부분에 도착 단어로 지옥에 갈 필요가 없습니다 어떤 시리얼 얼굴 값을 추가합니다." 이 충분하지 않습니다 좋아하지만 우리 위에 공식 설명에 따르면, 당신은 완벽하게 보완 정규 표현식 및 텍스트와 컨트롤을 사용하면 정규 표현식에 따라 완전히 와일드 카드 문자 나 문자열을 사용하는 것과 같이 정확하게 일치 할 정도로 정규 표현식을해야 스타일 문법.
참고 UISlector 관련 방법에 정규 표현식의 사용에 대한 모든 제한이 효과적이라는 오.

위치 결정 제어하여 클래스 이름 (3)
이 방법을 문제의 위치가 너무 이와 같이 일반적으로 텍스트 판 위치 결정 제어와 같은 다른 조건을 추가 한 후 상기 타겟 제어 범위를 좁힐 우선되며, 복제의 존재를 조절하는 것은 용이 .

3.1 UISelector.className 방법
addNote에서 UIObject 새로운 새 = (새로운 새 UiSelector () 클래스 이름 ( "android.widget.TextView") 텍스트 () "추가 참고"..)
assertEquals (addNote.getText () "추가 참고");
예 첫 번째 클래스 이름으로 모든 텍스트 뷰 컨트롤을 찾아, 다음이 텍스트 뷰 컨트롤의 텍스트를 봐 "추가 참고"컨트롤입니다.
3.2 UISelector.classNameMatches 방법
addNote에서 UIObject 새로운 새 = (새로운 새 UiSelector () classNameMatches (이하 "텍스트 뷰 $. *").)
assertEquals (addNote.getText () "추가 참고");
정규식과 결정 예상 클래스 이름인지 정규 표현식 및 제한 사항에 부합 일관된 관심은 2.4 절에 설명.
의사 XPath는 방법을 배치하여 4.
인터페이스의 XML 레이아웃에서 컨트롤 계층 구조를 기반으로 목표 사람들에게 어떤 길이에 UISelector 클래스를 제공합니다,하지만 난 여기를 호출 할 수 있도록 실제 UIAutomator이 findElementWithXpath 관련 방법과 유사한 Appium을 제공 없습니다 의사의 XPath 방법.

이 섹션에서는 더 이상 메뉴 옵션 내부의 활동을 사용하는 NotesList하지만 NoteEditor 하나 개 이상의 메뉴 항목이 메뉴 옵션 안에이 활동입니다.

UiSelector.fromParent 또는 UiObject.getFromParent 방법으로 4.1
내가 가장 유용이 방법은 현재 동작 테스트 케이스 코드가 차례로 다른 운영 컨트롤의 동일한 수준을 필요로 제어 수준의 제어 그룹 중 하나입니다 시간입니다. 형제가 제어 저장 부모 컨트롤을 통해 컨트롤을 삭제로 다음의 예는 같은 수준을 찾는 것입니다. 여기 UiObject.getFromParent 방법 및 UiSelector.fromParent 방법으로 인스턴스들의 목록은, 그 기능은 실제로 동일하다.

UiObject.getFromPatrent 方法 :

= 새로운 새로운에서 UIObject 저장 (새 새 UiSelector () 텍스트 ( "저장").)
assertEquals (save.getText (), "저장");
삭제 save.getFromParent = (UiSelector 새 새 () 텍스트) ( "삭제.");
assertEquals (delete.getText (), "삭제");
(이 예 조금 우회 서투른에서,하지만 봐에있을 것입니다 기능을 설명하기 위해) UiSelector.fromParent 방법 :
. = 상기에서 UIObject 새 새 (새 새 UiSelector () 텍스트를 삭제 ( "저장 ") .fromParent (새로운 새 UiSelector () 텍스트. ("삭제 ")));
assertEquals (delete.getText ()"; 삭제 ")
4.2 UiObject.getChild 방법 또는 UiSelector.childSelector함으로써
이 방법이 상위에 공지 컨트롤이 얼마나 빨리 자식 컨트롤 다음 부모 컨트롤을 찾을 때.

UiObject.getChild 방법 :

= 새로운 새로운에서 UIObject parentView에서 UIObject (새 새 UiSelector () 클래스 이름 ( "android.view.View에서").)
(. 새로운 새로운 UiSelector () 텍스트 ( "저장")) 저장 = parentView.getChild,
assertEquals (save.getText () "저장");
UiSelector.childSelector 방법 :
... = 저장 새로운 새에서 UIObject (새로운 새 UiSelector () 클래스 이름 ( "android.view.View에서") childSelector) (UiSelector 새로운 새 () 텍스트 ( "저장").)
assertEquals (저장 .getText (), "저장");
5. 컨트롤 ID를 위치시킴으로써
에 안드로이드 API Level18 버전 이상이 증가 속성을 사용하기 위해이 방법을 사용하기 전에 너무 조심, 안드로이드 컨트롤을 RESOURCEID 그 대상 시험 장비 귀하의 모든 UIAutomoator의 API 라이브러리 항아리 패키지 버전은 18 레벨 이상 사용. D : \ \ AndroidSDK \ 개발 예를 들어 I의 사용을 위해 로컬 버전의 SDK 저장소 19 플랫폼은 \ 안드로이드-19 \ uiautomator.jar

5.1 UiSelector.resourceId 방법
addNote = 새로운에서 UIObject (새 새 UiSelector ()을 RESOURCEID (. "안드로이드 : ID / 제목"));
assertEquals (addNote.getText (), "추가 참고");
5.2 UiSelector.resourceIdMatches 방법
addNote = 새로운에서 UIObject (새로운 새 UiSelector () resourceIdMatches ( "+ ID / 타이틀.").)
assertEquals은 (addNote.getText () "추가 참고");
참고 정규식이 제한되며 부의 일관된 설명 2.4
6. contentDescription 의해 위치
UiAutomator 프레임 워크를 사용 Uiautomator 프레임 워크 Appium가 있기 때문에, contentDescription 제어가 추가로 개발자의 요구를 강조하고있다 속성

일부 컨트롤은 다른 방법이나 위치 할 수있는 방법 사용하기 어려운
고유 한 값 그래서 우리는 매우 빠르게 컨트롤을 찾을 수있는 각 컨트롤 디자인, 민첩한 충분하게 contentDescription에있는 가장 중요한 일을!
온 다음과 같이 다음의 예는 정말 위의 컨트롤의 메모장 응용 프로그램이 등록 contentDescription하지 않기 때문에, 실행,하지만 우리가 contentDescription의 추가 메모를 가정하면이 컨트롤이 "AddNoteMenuDesc"하지 않으며, 다음 해당 코드를 작성해야한다.

6.1 UiSelector.description方法
(. 새로운 UiSelector () 설명 ( "AddNoteMenuDesc)); addNote 새에서 UIObject =
assertEquals (addNote.getText ()가 '메모 추가");
</ 사전> <H2> 6.2 UiSelector.descriptionContains方法</ H2> </ DIV> <DIV> <이전 이름 = "코드"클래스 = "자바"> addNote = 새로운에서 UIObject (새 UiSelector () descriptionContains ( "addNote").);
assertEquals (addNote.getText () "추가 참고 ");
6.3 UiSelector.descriptionStartWith方法
addNote = 새로운에서 UIObject (새 UiSelector () descriptionStartsWith. ("addNote "));
assertEquals (addNote.getText ()") "메모를 추가,
6.4 UiSelector.descriptionMatches方法
// addNote = 새로운에서 UIObject (새 UiSelector () descriptionMatches ( "^ AddNote * $.").);
//assertEquals(addNote.getText(),"Add ")를 참고;
7을 다른 방법에 의해 위치 결정을
이러한 일반적으로 사용되는 방법뿐만 아니라, UIAutomator 또한 타겟 좁은 조정 범위 등을 눌러 수있다 클릭 할 수 집광 특성에 따라 이러한 제어와 같은 다른 방법을 지원하며, 특정 용도를 열거되지, 다음 시험을 확인하기 위해 볼 수있다 코드입니다.
majcit.com.UIAutomatorDemo 패키지,

가져 오기 com.android.uiautomator.core.UiDevice,
가져 오기 com.android.uiautomator.core.UiObject,
가져 오기 com.android.uiautomator.core.UiObjectNotFoundException,
가져 오기 com.android.uiautomator.core.UiScrollable ;
오기 com.android.uiautomator.core.UiSelector;
오기 com.android.uiautomator.testrunner.UiAutomatorTestCase;

오기 정적 org.hamcrest.Matchers * ;.
오기 정적 org.hamcrest.MatcherAssert.assertThat;

공용 클래스 UISelectorFindElementTest는 UiAutomatorTestCase {연장

공개 () testDemo 보이드가 발생 UiObjectNotFoundException {
UIDevice 장치를 getUiDevice = ();
device.pressHome ();
// 메모장
에서 UIObject 애플리케이션 노트 = 새로운에서 UIObject (새 UiSelector () 텍스트 ( "주").);
appNotes.click ();
응용 프로그램까지 // 수면 삼초 준비
시도 {
Thread.sleep를 (3000);
} 캐치 (예외 : InterruptedException E1) {
// TODO 자동 생성 캐치 블록
e1.printStackTrace ();
}

// 연상 시스템 메뉴 옵션
device.pressMenu ();
에서 UIObject addNote = 새로운에서 UIObject (새 UiSelector () 텍스트 ( "메모를 추가합니다").);
assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새로운에서 UIObject ((false)를 확인 새 UiSelector () .clickable (참).);
assertEquals (addNote.getText (), "메모를 추가합니다");


addNote = 새로운에서 UIObject (새 UiSelector () 클래스 이름 ( "android.widget.TextView") 텍스트 ( "메모를 추가합니다")..);
assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새로운에서 UIObject (새 UiSelector () classNameMatches ( "* 텍스트 뷰 $.").);
assertEquals (addNote.getText (), "메모를 추가합니다");

// addNote = 새에서 UIObject (새 UiSelector () 설명 ( "AddNoteMenuDesc).)
//assertEquals(addNote.getText(),"Add 주")

. // addNote = 새에서 UIObject (새 UiSelector () descriptionContains ( " addNote "));
//assertEquals(addNote.getText(),"Add 노트");

// addNote = 새로운에서 UIObject (새 UiSelector () descriptionStartsWith ( "addNote"));.
// assertEquals (addNote.getText () ,"메모를 추가");


//assertEquals(addNote.getText(),"Add 노트 ");

addNote = 새로운에서 UIObject (새 UiSelector () 포커스 (참)는 .text ( "메모를 추가합니다").);
assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새로운에서 UIObject (. 새로운 UiSelector ()가 집중 (거짓)는 .text () "메모를 추가합니다");
assertEquals (addNote.getText (), "메모를 추가합니다");


// TBD
// addNote = 새로운에서 UIObject (새 UiSelector () fromParent (선택).)

addNote = 새로운에서 UIObject (새 UiSelector () 지수 (0)는 .text () "메모를 추가합니다.");
assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새로운에서 UIObject (.. 새로운 UiSelector () 클래스 이름 ( "android.widget.TextView")를 활성화 (참) .instance (0));
assertEquals (addNote.getText (), "메모를 추가합니다");


assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새로운에서 UIObject (새 UiSelector () 텍스트 ( "메모를 추가합니다").);
assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새로운에서 UIObject (새 UiSelector () textContains ( "추가").);
assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새로운에서 UIObject (새 UiSelector () textStartsWith ( "추가").);
assertEquals (addNote.getText (), "메모를 추가합니다");


addNote = 새로운에서 UIObject (새 UiSelector () textMatches ( "추가 *.").);
assertEquals (addNote.getText (), "메모를 추가합니다");

addNote = 새에서 UIObject : (새로운 UiSelector () RESOURCEID ( "로이드 ID / TITLE ')).
assertEquals (addNote.getText (), "메모를 추가합니다");


assertEquals (addNote.getText (), "메모를 추가합니다");

에디터 활동 // 이동, 메뉴 옵션을 먼저 취소해야하는
device.pressMenu를 ();
// 새로운 추가 참고 항목 알아
UiScrollable noteList 새로운 UiScrollable = (새 UiSelector을 () 클래스 이름 ( "android.widget.ListView").);
// UiScrollable noteList = 새로운 UiScrollable (새 UiSelector () 스크롤 (참).);
에서 UIObject 노트 = NULL;
경우 (noteList.exists ()) {
주 = noteList.getChildByText (새 UiSelector () 클래스 이름 ( "android.widget.TextView"), "주", 사실.);
// 참고 = noteList.getChildByText (새 UiSelector () 텍스트 ( "주"), "주", 사실.);
}
다른 {
노트는 새로운에서 UIObject (새 UiSelector () 텍스트 ( "주 1").) =;



NoteEditor 활동에 // 이동
note.click ();
device.pressMenu ();

에서 UIObject는 = null을 저장;
= NULL을 삭제에서 UIObject;

저장 = 새로운에서 UIObject (새 UiSelector () 텍스트 ( "저장").);
assertEquals (save.getText (), "저장");
= save.getFromParent (새 UiSelector ())를 ( "삭제"텍스트를.) 삭제;
assertEquals (delete.getText (), "삭제");

삭제 = 새로운에서 UIObject (새 UiSelector () 텍스트 ( "저장") fromParent (새 UiSelector ())) ( "삭제"텍스트를...)
assertEquals (delete.getText (), "삭제");

저장 = 새로운에서 UIObject (새 UiSelector () 클래스 이름 ( "android.view.View에서") childSelector (새 UiSelector () 텍스트 ( "저장"))...)
assertEquals (save.getText (), "저장");

parentView에서 UIObject = 새에서 UIObject (새 UiSelector () 클래스 이름 ( "android.view.View에서").);
저장 = parentView.getChild (새 UiSelector () 텍스트 ( "저장").);
assertEquals (save.getText (), "저장");


}
}

추천

출처www.cnblogs.com/ndd2016/p/11999975.html