Appium收集任何屏幕上的所有文本

时间:2018-05-29 11:14:36

标签: java xpath appium

我正在为应用程序(iOS和Android appium版本1.7.0)进行翻译自动化。意思是我应该浏览应用程序的所有页面然后我使用gcloud api来识别语言。

我需要帮助找到有效方式来收集特定屏幕上显示的所有文字。

目前我正在使用此approch,如下面的代码所示:

  1. 我找到页面上的所有元素
  2. 我得到了具有文字属性的

    public void displayText()
    {
    
        System.out.println("i will display all the text and each of their languages");
    
        // I find all the elements on the page as such
        List<MobileElement> list = driver.findElements(By.xpath("//*"));
    
    
        assertTrue(list.size()>0) ;
    
        System.out.println(list.size());
    
        //foreach of the elements detected I determine the language
    
    
    
        for(int i=0;i<list.size();i++)
        { if (list.get(i).getText()!= null) {
            String SeenText = list.get(i).getText();
            System.out.println(SeenText);
    
            //Lang detection
    
        List<Detection> detections 
        =translate.detect(ImmutableList.of(list.get(0).getText()));
        System.out.println("Language(s) detected:");
        for (Detection detection : detections) {
        System.out.printf("\t%s\n", detection);}
    
    
        }}
    
    System.out.println(driver1.getPageSource());
    
  3. 但是,这仅适用于元素较少的页面。内容繁重的分页需要花费大量时间才能使appium会话超时。

    我考虑过手动解析&#34; driver.getPageSource())&#34;的结果。但我不确定这是否可靠。

    有关更好,更实用的方法来获取屏幕中所有文字的想法吗?

    Thans!

1 个答案:

答案 0 :(得分:1)

使用findElements()收集整个用户界面,因为你注意到MobileElements可能是一个非常繁重的过程,特别是在使用XPath时。

我建议您探索通常(或仅希望)包含应用程序中任何文本内容的元素类类型,并通过driver.findElements(By.className(""));

获取所有这些元素

在Android上,所有文本内容都很有可能使用TextViews: driver.findElements(By.className("android.widget.TextView"));

在iOS上,文本内容通常在XCUIElementTypeStaticText中找到 driver.findElements(By.className("XCUIElementTypeStaticText"));

driver.getPageSource()将是保持验证逻辑高效的最后手段。在这种情况下,您会向Appium服务器发送一个请求,并立即收到您要查找的所有信息。解析XML在本地执行并不重要,但需要花费一些精力来实现。要使driver.getPageSource()调用内容可靠,您应该首先声明该页面已完全加载。