как проверить, отображается ли MobileElement на экране - PullRequest
0 голосов
/ 16 января 2020

Это код

for (loopVal = 1; loopVal < endVal; loopVal++) {

    MobileElement followButton = (MobileElement) driver.findElement(By.xpath("//android.widget.ListView[@index='0']//android.widget.FrameLayout[@index='"+loopVal+"']//android.widget.LinearLayout[@index='0']//android.widget.FrameLayout[@index='2']//android.widget.TextView[@index='0']"));

    String followOrNot = followButton.getText();
    System.out.println(followOrNot + " " + loopVal);
}

Если MobileElement followButton не найден, выдает ошибку и остальная часть кода не будет выполнена

Мне нужно проверить если followButton присутствует до того, как моя программа запустит .getText() на followButton

Если я попытаюсь окружить followButton блоком try-catch

try {

    MobileElement followButton = (MobileElement) driver.findElement(By.xpath("//android.widget.ListView[@index='0']//android.widget.FrameLayout[@index='"+loopVal+"']//android.widget.LinearLayout[@index='0']//android.widget.FrameLayout[@index='2']//android.widget.TextView[@index='0']"));

    } catch(org.openqa.selenium.NoSuchElementException e) {

        //handle error

    }

Тогда я получу ошибка на String followOrNot.getText(), которая говорит

followButton не может быть решена

Если я пытаюсь использовать .isEmpty на followButton

        MobileElement followButton = (MobileElement) driver.findElement(By.xpath("//android.widget.ListView[@index='0']//android.widget.FrameLayout[@index='"+loopVal+"']//android.widget.LinearLayout[@index='0']//android.widget.FrameLayout[@index='2']//android.widget.TextView[@index='0']"));

    if(driver.findElements(followButton).isEmpty()) {

        //handle error
    }

Тогда Я получаю сообщение об ошибке findElements, в котором говорится

Метод findElements (By) в типе AppiumDriver не применим для аргументов (MobileElement)

, если я пытаюсь использовать .isDisplayed на followButton

        MobileElement followButton = (MobileElement) driver.findElement(By.xpath("//android.widget.ListView[@index='0']//android.widget.FrameLayout[@index='"+loopVal+"']//android.widget.LinearLayout[@index='0']//android.widget.FrameLayout[@index='2']//android.widget.TextView[@index='0']"));

    if(followButton.isDisplayed()) {

        //do nothing

    } else {

        //handle error

    }

, тогда проблема заключается в том, что, если followButton не найден, будет выдана ошибка, считая остальной код бесполезным

все, что я пытаюсь сделать, это проверить наличие followButton перед выполнением любой другой операции с followButton

Я задал вопрос, похожий на этот один, но не получил никаких полезных ответов, мой единственный вариант - снова спросить.

Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Вы можете попробовать это так. Это работает для меня.

Объявление мобильного элемента.

MobileElement followButton=(MobileElement) driver.findElement(By.xpath(“//android.widget.ListView[@index='0']//android.widget.FrameLayout[@index='"+loopVal+"']//android.widget.LinearLayout[@index='0']//android.widget.FrameLayout[@index='2']//android.widget.TextView[@index='0']”));

Функция для проверки существования элемента

public boolean checkMobileElementExist(MobileElement element)  {
    boolean objectExist = false;
    try {
        objectExist =element.isDisplayed();

    } catch (NoSuchElementException e) {
        return false;
    }
    return objectExist;
}

Теперь используйте его

  If(checkMobileElementExist(followButton))

       {
    // Do your stuff
    }

Другой подход - использование размера списка элементов

List<MobileElement> followButtons=(List<MobileElement>)driver.findElements(By.xpath(“//android.widget.ListView[@index='0']//android.widget.FrameLayout[@index='"+loopVal+"']//android.widget.LinearLayout[@index='0']//android.widget.FrameLayout[@index='2']//android.widget.TextView[@index='0']”));


     If(!followButtons.isEmpty())

           {
        // Do your stuff
        }
0 голосов
/ 16 января 2020

Вы можете проверить, присутствует ли элемент на странице, сначала выбрав список этого элемента, а затем проверив размер списка. Если размер больше нуля, то элемент присутствует, иначе его нет.
Вы можете сделать это следующим образом:

if(driver.findElements(By.xpath("//android.widget.ListView[@index='0']//android.widget.FrameLayout[@index='"+loopVal+"']//android.widget.LinearLayout[@index='0']//android.widget.FrameLayout[@index='2']//android.widget.TextView[@index='0']")).size()>0){
// Element is present
// Do the operations here
}
else{
// Element is not present
}
...