Appium Сбор всего текста на любом экране - PullRequest
0 голосов
/ 29 мая 2018

Я работаю над автоматизацией перевода для приложения (iOS и Android Appium версии 1.7.0).Это означает, что я должен пройти все страницы приложения, а затем использую gcloud api для определения языка.

Мне нужна помощь в поиске эффективного способа сбора всего текста, отображаемого наопределенный экран.

В настоящее время я использую этот подход, как показано в коде ниже:

  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());
    

Однако это работает только для страниц с несколькими элементами.Это занимает так много времени для контента, тяжело разбитого на страницы, что время сеанса appium истекло.

Я рассмотрел ручной анализ результата "driver.getPageSource ())", но я не уверен, что это надежно.

Есть идеи по поводу лучшего и функционального способа отображения всего текста на экране?

Thans!

1 Ответ

0 голосов
/ 29 мая 2018

Использование 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 () надежным, вам, вероятно, следует сначала подтвердить, что страница полностью загружена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...