Appium — Как проверить, существует ли объект

#android #appium

#Android #appium

Вопрос:

Я новичок в этом форуме и appium / android automation, мне нужна помощь в проверке, существует ли объект в моем приложении, прежде чем я предприму следующее действие.

Я пытался использовать следующий код ниже, но даже не достиг моего второго оператора печати.

 @Test
public void addContact() {
    System.out.println( "Checking if Contact exists.... 111111 ");
   
    WebElement e = driver.findElement(By.name("John Doe"));
           
    System.out.println( "Checking if Contact exists.... 222222");
   
    boolean contactExists = e.isDisplayed();
   
    System.out.println( contactExists );
   
   
    if (contactExists == true) {          
        System.out.println( "Contact exists.... ");           
    } else {           
        System.out.println( "Contact DOES NOT exists.... ");
    }
 }
  

Запуск этого кода выводится на консоль appium … он просто продолжает выполнять цикл, и скрипт завершается с ошибкой.

информация: [BOOTSTRAP] [информация] Получена команда типа ACTION

информация: [BOOTSTRAP] [debug] Получено командное действие: найти

информация: [BOOTSTRAP] [debug] Поиск неизвестного по ИМЕНИ с помощью ContextID:

информация: [BOOTSTRAP] [info] Возвращает результат: {«значение»: «Элемент не найден», «статус»: 7}

информация: Отправка команды в рабочую очередь appium: [«find»,{«strategy»: «name», «selector»: «John Doe», «context»:»», «multiple»:false}]

информация: [BOOTSTRAP] [информация] Получены данные от клиента: {«cmd»: «действие», «action»: «найти», «параметры»:{«стратегия»: «имя», «селектор»:»Неизвестный», «контекст»:»», «множественный»: false}}

является ли isDisplayed правильным подходом здесь или есть лучшая альтернатива для этого?

Приветствую …. ТИА

Ответ №1:

Если вы используете Appium 1.0

  • By.name стратегия определения местоположения устарела.Пожалуйста, используйте некоторые другие материалы, такие как.xpath и т.д.

Ответ №2:

В более новой версии appium у вас есть «идентификатор доступности».Используйте их вместо этого. Удачной автоматизации

Ответ №3:

Возможно, вам поможет следующее. У меня есть методы в моем классе TestBase:

     protected static boolean isElementPresent(By by) {
    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    List<WebElement> list = driver.findElements(by);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    if (list.size() == 0) {
        return false;
    } else {
        return list.get(0).isDisplayed();
    }

}

public boolean elementIsNotPresent(By by) {
    try {
        driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
        return driver.findElements(by).isEmpty();
    } finally {
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
}
  

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

     WebDriverWait wait = new WebDriverWait(driver, 30);
    wait.until(ExpectedConditions.elementToBeClickable(By
            .xpath("//android.widget.Button[contains(@text, 'Log In')]")));
  

или:

 WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.presenceOfElementLocated(By
            .xpath("//android.widget.TextView[contains(@resource-id, 'action_bar_title')]")));