2013-02-27 144 views
8

मैं एंड्रॉयड UiAutomator का उपयोग कर एक Android Webview परीक्षण करने के लिए कोशिश कर रहा था। मैं documentation को समझने के रूप में, एक WebvView स्क्रॉल यूआई ट्रेवर्सल घटनाओं उत्पन्न होगा, और उन के माध्यम से getUiDevice().getLastTraversedText().UiAutomator getLastTraversedText()

हालांकि, पठनीय होना चाहिए जब मैं getUiDevice().pressDPadDown() का उपयोग किसी वेब दृश्य के माध्यम से स्क्रॉल करने के लिए, getUiDevice().getLastTraversedText() अशक्त लौटने रखता है।

मुझे क्या याद आया?

किसी को भी काम करने के लिए मैं बहुत ज्यादा एक शॉर्ट कोड नमूना की सराहना करेंगे कि इस कॉल हो गया है है।

उत्तर

4

खराब समाचार: मैंने यह काम करने के तरीके को समझने के लिए कई घंटे बिताए हैं, हालांकि मुझे getUiDevice().getLastTraversedText() पर कॉल के जवाब में अभी तक कुछ भी नहीं मिला है।

  • एक adb shell में uiautomator events चलाने वाले सभी पहुँच क्षमता घटनाक्रम डंप करना चाहिए:

    FYI करें यहाँ बातें मैंने कोशिश की और पता चला है कर रहे हैं। यह निश्चित रूप से विभिन्न घटनाओं की रिपोर्ट करता है, हालांकि जब मैं मैन्युअल रूप से वेबव्यू की सामग्री को स्क्रॉल करता हूं तो यह लगभग चुप है। यदि वेबव्यू में सामग्री स्क्रॉल की गई है उदा। ऊपर या नीचे से बाहर नेविगेट करने के बाद क्या स्क्रीन पर दिखाई जाने मैं घटना निम्न प्रकार के सूचना मिलती है:

03-10 19:44:47.436 EventType: TYPE_VIEW_SCROLLED; EventTime: 911700; PackageName: com.example.simplewebview; MovementGranularity: 0; Action: 0 [ ClassName: android.webkit.WebView; Text: []; ContentDescription: null; ItemCount: -1; CurrentItemIndex: -1; IsEnabled: true; IsPassword: false; IsChecked: false; IsFullScreen: false; Scrollable: true; BeforeText: null; FromIndex: -1; ToIndex: -1; ScrollX: 0; ScrollY: 270; MaxScrollX: 0; MaxScrollY: 544; AddedCount: -1; RemovedCount: -1; ParcelableData: null ]; recordCount: 0

  • अगर मैं अन्वेषण-दर-स्पर्श पहुँच की स्थापना तो मैं में uiautomator उपयोग नहीं कर सकते करने के लिए सक्षम adb shell। हर बार जब मैं एक uiautomator आदेश चला, मैं Killed की एक प्रतिक्रिया मिल। मैं प्रदर्शित पाठ को बोलने के लिए एक्सप्लोर-बाय-टच का उपयोग कर रहा था। जब मैं के साथ सभी लिंक पर नेविगेट करने में सक्षम नहीं था द्वारा एक्सप्लोर टच सक्षम (या जब क्रुद्ध करनेवाला आभासी D- पैड जो Android पहुंच सुइट का हिस्सा है का उपयोग करके) इसे बाहर पढ़ा LinkText लिंक से कुछ के लिए (जैसे यह पेज मैं http://pickalize.info/ के परीक्षण) के लिए उपयोग कर रहा था पर जापानी वर्णों को छोड़ दिया

  • अगर मैं मैं प्रयोजन के लिए बनाया एक सरल WebView अनुप्रयोग के लिए एक स्क्रिप्ट जो आपके जैसा (संचालित) तो मैं में यूआई देख सकते हैं वेबव्यू विभिन्न तत्वों को हाइलाइट करता है, मेरे मामले में निम्नलिखित वेब पेज से वेब लिंक मैं http://pickalize.info/ पर अन्य कारणों की जांच कर रहा था, वर्तमान में चयनित लिंक की पृष्ठभूमि नीली नीली हो जाती है, हालांकि getUiDevice().getLastTraversedText()

  • पर कॉल द्वारा कोई टेक्स्ट वापस नहीं किया जाता है

मेरे सबसे अच्छा अनुमान है कि हम या तो अनुपयुक्त विधि का उपयोग करने की कोशिश कर रहे है। शायद हम अनुरोध करने वाला और WebView के डोम (अच्छाई जानता है कि कैसे) को पार्स, लेकिन getLastTraversedText()

When the view control used can return a reference to is Document Object Model, it is recommended then to use the view's DOM instead.

BTW के प्रलेखन से निम्नलिखित टिप्पणी को देख रहे हैं: मैं Android 4.2 के साथ परीक्षण कर रहा हूँ भौतिक उपकरणों पर .2।

अपने जांच के साथ गुड लक। मैं समय-समय पर समस्या को देख रहा हूं ताकि मुझे उई ऑटोमेटर की उपयुक्तता और क्षमताओं के बारे में अधिक जानने में मदद मिल सके।

अपडेट (26 मार्च 2013): मैंने डिवाइस की एक्सेसिबिलिटी सेटिंग मेनू में 'अनुमत' को 'अनुमोदित' सेट के साथ फिर से परीक्षण किया।मैं अभी भी करने के अशक्त द्वारा getLastTraversedText()

लौटे यहाँ अपने परीक्षण कोड की हिम्मत है:

सार्वजनिक वर्ग WebViewNavigator फैली UiAutomatorTestCase {

public void testNavigationDownGeneratesEventText() throws UiObjectNotFoundException { 
    getUiDevice().pressHome(); 
    UiObject allAppsButton = new UiObject(new UiSelector().description("Apps")); 
    allAppsButton.clickAndWaitForNewWindow(); 

    UiObject appsTab = new UiObject(new UiSelector().text("Apps")); 
    appsTab.click(); 

    UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true)); 
    appViews.setAsHorizontalList(); 

    String nameOfAppToLaunch = "SimpleWebView"; 
    UiAutomatorHelpers.launchAppCalled(nameOfAppToLaunch); 

    UiObject simpleWebViewValidation = new UiObject(new UiSelector().packageName("com.example.simplewebview")); 
    assertTrue("The package name seems incorrect for the app we want to launch", simpleWebViewValidation.exists()); 
    simpleWebViewValidation.clickAndWaitForNewWindow(); 

    // Ok we should have started the app now... On to the test 

    Log.i("WebViewNavigatorTest", "About to start navigating down the contents of the webview"); 
    int closeToInfinity = 10; 
    for (int i = 0; i < closeToInfinity; i++) { 
     boolean goneDown = getUiDevice().pressDPadDown(); 
     if (!goneDown) { 
      break; 
     } 

     String lastTraversedText = getUiDevice().getLastTraversedText(); 
     if (lastTraversedText != null) { 
      Log.i("WebViewNavigatorTest", lastTraversedText); 
     } else { 
      Log.w("WebViewNavigatorTest", "(null) returned for getLastTraversedText()"); 
     } 
    } 
} 

}

और यहाँ ADB आदेश मैं देख रहा हूँ करने के लिए उपयोग संदेश जब यह कोड एंड्रॉइड डिवाइस पर निष्पादित किया जाता है: adb logcat WebViewNavigatorTest:I *:S

आउटपुट द्वारा पीछा किया गया:

I/WebViewNavigatorTest(29358): About to start navigating down the contents of the webview 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
W/WebViewNavigatorTest(29358): (null) returned for getLastTraversedText() 
+0

आपके उत्तर के लिए धन्यवाद! मैं भी उससे आगे नहीं मिला है। मुझे यह विशेष रूप से परेशान लगता है कि TalkBack WebView की सामग्री को पढ़ने में सक्षम है .. मैं यहां कोई अतिरिक्त निष्कर्ष भी जोड़ूंगा। – Micha

+0

एक विचार के रूप में, शायद हमें उन वेब स्क्रिप्ट को स्थापित करने की आवश्यकता है जो वेब ब्राउज़र से सामग्री को पढ़ने की क्षमता बढ़ाने के लिए टॉकबैक का उपयोग करते हैं? – JulianHarty

+0

रिकॉर्ड के लिए, एंड्रॉइड 4.3 पर कोई सुधार नहीं। – Micha