[content-description] find_element_by_accessibility_id 안 드 로 이 드 에서 의 상세 한 설명

17227 단어 appium
출처:http://testerhome.com/topics/1034
최근 에 Appium 이 새로운 걸 도 입 했 어 요.  find element  방법:python client 예 를 들다
def find_element_by_accessibility_id(self, id):
        """Finds an element by accessibility id.

        :Args:
         - id - a string corresponding to a recursive element search using the
         Id/Name that the native Accessibility options utilize

        :Usage:
            driver.find_element_by_accessibility_id()
        """
        return self.find_element(by=By.ACCESSIBILITY_ID, value=id)

문서 에서 이렇게 말 했다.
Allows for elements to be found using the "Accessibility ID". The methods take a string representing the accessibility id or label attached to a given element, e.g., for iOS the accessibility identifier and for Android the content-description. Adds the methods driver.find_element_by_accessibility_id  and  find_elements_by_accessibility_id .
'Accessibility ID'로 요 소 를 찾 을 수 있다 는 뜻 이다.iOS 의 경우 access bility identifier 입 니 다.Android 에 대해 서 는...  content-description
뭐 공부 해요?  content-description  네?
공식 적 으로 는 이렇게 말 했다.
http://developer.android.com/training/accessibility/accessible-app.html Android has several accessibility-focused features baked into the platform, which make it easy to optimize your application for those with visual or physical disabilities. However, it's not always obvious what the correct optimizations are, or the easiest way to leverage the framework toward this purpose. This lesson shows you how to implement the strategies and platform features that make for a great accessibility-enabled Android application.
이 속성 은 주로 장애인 을 위 한 것 으로 프로그램 을 사용 할 수 있 도록 준비 되 어 있 기 때문에 이 경고 앞 에[Accessbility]가 있 습 니 다.
예 를 들 면,예 를 들 면,너 에 게 는  ImageView  그림 을 한 장 놓 으 면 이 그림 은 많은 물체 와 색깔,색 이 약 하거나 색맹 이 있 는 사람들 을 포함 할 수 있 습 니 다.그들 은 이 그림 이 도대체 무엇 을 그 렸 는 지 분간 할 수 없 기 때문에 이 럴 때  contentDescription  효과 가 있 을 겁 니 다.예 를 들 어 Android 의 일부 프로그램 은 사용자 에 게 이 그림 이 무엇 을 그 렸 는 지 소리 로 알려 줄 수 있 습 니 다.그들 이 읽 은 것 은 바로 당신 입 니 다.  contentDescription  라 는 내용 을 담 았 다.
이 건 사실 iOS 랑...  accessibility identifier  같은 거 야.
contentDescription 이 필요 한 컨트롤 에 contentDescription 을 추가 하 는 것 은 좋 은 프로 그래 밍 습관 입 니 다.사실 ADT 의 Lint 검 측 도 알려 줍 니 다.
[Accessibility] Missing contentDescription attribute on image

그 러 니까 컨트롤 에  android:contentDescription="@string/desc이렇게 하면 Appium 이 위 치 를 정할 수 있다.
어떻게 android:contentDescription 을 추 가 했 는 지 판단 합 니까?
첫 번 째 방법 은 컨트롤 의 xml 에 android:contentDescription 속성 을 추 가 했 는 지 확인 합 니 다.
두 번 째,코드 보기,myView.setContentDescription(desc);세 번 째,Hierarchy Viewer 사용appium sample-code 에 있 는 androidcoplex.py 는 실제로 써 야 돼 요. https://github.com/appium/android-apidemos 이 프로젝트 는 apk 를 내 보 내 서 테스트 합 니 다.
    def test_find_elements(self):
        # pause a moment, so xml generation can occur
        sleep(2)

        els = self.driver.find_elements_by_xpath('//android.widget.TextView')
        self.assertEqual('API Demos', els[0].text)

        el = self.driver.find_element_by_xpath('//android.widget.TextView[contains(@text, "Animat")]')
        self.assertEqual('Animation', el.text)

        el = self.driver.find_element_by_accessibility_id("App")
        el.click()

        els = self.driver.find_elements_by_android_uiautomator('new UiSelector().clickable(true)')
        # there are more, but at least 10 visible
        self.assertLess(10, len(els))
        # the list includes 2 before the main visible elements
        self.assertEqual('Action Bar', els[2].text)

        els = self.driver.find_elements_by_xpath('//android.widget.TextView')
        self.assertLess(10, len(els))
        self.assertEqual('Action Bar', els[1].text)

기타
genymotion 을 사용 해 보 았 습 니 다.아주 좋 습 니 다.Appium 실험 을 하 는 것 이 좋 습 니 다.
시 뮬 레이 터 를 사용 할 때 문제 가 발생 했 습 니 다.
java.lang.IllegalArgumentException: eglChooseConfig failed EGL_NOT_INITIALIZED

03-29 13:21:34.556: E/AndroidRuntime(4458): FATAL EXCEPTION: main
03-29 13:21:34.556: E/AndroidRuntime(4458): Process: com.example.news, PID: 4458
03-29 13:21:34.556: E/AndroidRuntime(4458): java.lang.IllegalArgumentException: eglChooseConfig failed EGL_NOT_INITIALIZED
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.HardwareRenderer$GlRenderer.chooseEglConfig(HardwareRenderer.java:1173)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.HardwareRenderer$GlRenderer.loadEglConfig(HardwareRenderer.java:1135)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.HardwareRenderer$GlRenderer.initializeEgl(HardwareRenderer.java:1117)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.HardwareRenderer$GlRenderer.initialize(HardwareRenderer.java:1057)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1550)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.Choreographer.doFrame(Choreographer.java:544)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.os.Handler.handleCallback(Handler.java:733)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.os.Handler.dispatchMessage(Handler.java:95)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.os.Looper.loop(Looper.java:136)
03-29 13:21:34.556: E/AndroidRuntime(4458): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-29 13:21:34.556: E/AndroidRuntime(4458): at java.lang.reflect.Method.invokeNative(Native Method)
03-29 13:21:34.556: E/AndroidRuntime(4458): at java.lang.reflect.Method.invoke(Method.java:515)
03-29 13:21:34.556: E/AndroidRuntime(4458): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-29 13:21:34.556: E/AndroidRuntime(4458): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-29 13:21:34.556: E/AndroidRuntime(4458): at dalvik.system.NativeStart.main(Native Method)

Google 은 Opengl es 와 연결 되 었 습 니 다.이것 은 제 가 사용 하 는 문제 가 아니 라 는 것 을 알 게 되 었 습 니 다.마지막 으로 시 뮬 레이 터 의 문 제 를 찾 아 재 부팅 한 후에 문 제 를 해결 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기