#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')]")));