Не удалось найти подтверждение собственного приложения для Android после многих усилий в области автоматизации

Я делаю автоматизацию собственного приложения Android и хочу подтвердить проверку входа в систему с помощью текста. Когда я попытался выбрать его с помощью инспектора Appium и Uiautomator. Оба не могут найти секцию проверки, чтобы ее можно было выбрать.

введите описание изображения здесь

Я попробовал код с разных форумов и обсуждения в Appium, но все же не смог найти эту проверку с помощью автоматизации. Я пробовал следующее:

Код 1

JavascriptExecutor js = (JavascriptExecutor)driver;

WebElement field = driver.findElement(By.xpath("//android.widget.EditText[@text='Enter mobile number']"));
// Boolean is_valid = (Boolean)js.executeScript("return arguments[0].checkValidity();", field);

try {
    String message = (String) js.executeScript("return arguments[0].validationMessage;", field);
} catch (Exception E) {

Выход:

Исключение: org.openqa.selenium.WebDriverException: метод еще не запущен были реализованы

Код 2

public boolean IsValidationFired() {
    if(driver.getPageSource().contains("Invalid")) {
        System.out.println("PASS");
    } else {
        System.out.println("FAIL");
    }
}

Выход:

Печать = FAIL

Я не уверен, что это всплывающее окно javascript или всплывающее сообщение с помощью обычного приложения или тоста. Но вы хотите проверить его и проверить с помощью автоматизации.

Обновить

Код, используемый для проверки валидации: contactnu.setError("Invalid phone number.");

Ответы

Ответ 1

Я занимаюсь автоматической проверкой приложений Android за последние 2 года. Я сталкивался с той же проблемой много раз. К сожалению, uiAutomator не обнаруживает такие элементы, поэтому мы не можем выполнять какие-либо действия над такими элементами.

Appium отправляет команду uiAutomator и uiAutomatar выполняет действия на устройстве. uiAutomator может выполнять действия, если uiAutomator видит эти элементы.

Поэтому я предлагаю вам не тратить много времени на использование java script или xPath, потому что я уже пробовал решения для шлангов, но ни один из них не работал.

Однако есть одно решение, которое очень длительное. Вы можете снять снимок экрана с экрана и сохранить его на своем компьютере во время выполнения и проверить, не указан ли этот текст "Недопустимый номер телефона". доступен на изображении с помощью SIKULI. ИЛИ иначе вы можете попросить разработчика изменить сообщение об ошибке на некоторый видимый компонент в uiAutomator. Надеюсь, это поможет вам.

Ответ 2

Почему бы не попытаться выполнить поиск с регулярным выражением, например:

public boolean IsValidationFired()
{           
       try{
           WebElement invalid = driver.findElement(By.xpath("//*[@text='Invalid phone number.']"));
           //You could check if @text contains just invalid Invalid
           //WebElement invalid = driver.findElement(By.xpath("//*[contains(@text, 'Invalid')]]"));
           if(invalid != null)
           {
               System.out.println("PASS");
           }
           else
           {
               System.out.println("FAIL");
           }
       }catch(NoSuchElementException ex){
           System.out.println("Element not found");
       }
}

В любом случае, это не очень хорошее решение (* at xpath)... Просто используйте его для тестирования. Поиск будет медленным... Если вы найдете элемент, вам нужно будет сделать лучшее решение XPATH...

Примечание. После того, как вы найдете свой элемент, чтобы узнать, является ли TextView, Toast,... Я предлагаю сделать это:

System.out.println(invalid.getAttribute("className"));
//This will print something like: "android.widget.TextView"