Прошло около 3 месяцев с тех пор, как я вернулся к Java для автоматизации тестирования, и, что ж, это освежающее изменение, так как большая часть моего недавнего опыта была связана с Javascript. Мягко говоря, Java 2022 года сильно отличается от того, что было в 2017 году, и разве мы не любим ее за все это!
Я утверждаю, что Javascript (и, конечно, Typescript тоже) прекрасно подходит для автоматизации тестирования; в основном потому, что многие пакеты готовы, прямо там и прямо сейчас, чтобы выполнить любой уровень тестирования белого ящика. Но обратная сторона, как и все в тенденциях, заключается в том, что все внимание уделяется новым, а старым, выдающимся, и в данном случае оригинальному языку автоматизации тестирования Java, досталось все FOMO.
Фактически, Java-клиент для Appium по-прежнему подходит для React-Native, а также для Flutter, для которого я собираюсь поделиться своим опытом, пытаясь заставить автоматизацию работать для примера приложения, которое они поставляют как часть установки Flutter.
Итак, без лишних слов, давайте проясним некоторые вопросы в Java-клиенте, когда вы исходите из всей интернет-литературы об автоматизации Flutter в Javascript.
- Нужно ли нам как-то интегрировать «appium-flutter-driver»? Ответ: Нет. Это действительно для тестирования белого ящика в Javascript/Typescript. Для последнего приложения не требуется находить или выполнять действия с мобильными элементами.
- Нужно ли нам переключать драйвер appium на «FLUTTER-CONTEXT»?
Ответ: Нет, то же объяснение, что и выше. - Нужно ли нам каждый раз вызывать execute_script, чтобы мелкие вещи работали? Ответ: в основном нет. Для простых операций с мобильными элементами, таких как идентификация, щелчок, получение текста и т. д. Appium, готовый к использованию, работает хорошо.
Раскладка элементов в приложении Flutter — Android
Как видно из приведенного выше примера, мобильные элементы имеют параметры content-desc, которые можно использовать для идентификации мобильных элементов.
Предварительные действия
- Создайте свое флаттер-приложение для эмулятора Android
- Определите местоположение APK для отладки, обычно это my_app/build/app/outputs/apk/debug/app-debug.apk.
- Запустите свой сервер appium по умолчанию
Собираем все вместе
//pseudo code, modify according to your setup.. ... public class Sample { private final String URL_STRING = "http://127.0.0.1:4723/wd/hub"; private URL url; private DesiredCapabilities capabilities; private AppiumDriver driver; public void androidTest() throws MalformedURLException, InterruptedException { System.out.println("Android Test"); url = new URL(URL_STRING); capabilities =new DesiredCapabilities(); capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 300); capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2"); capabilities.setCapability(MobileCapabilityType.DEVICE_NAME,"emulator-5554"); capabilities.setCapability(MobileCapabilityType.PLATFORM,"android"); capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION,"12"); capabilities.setCapability(MobileCapabilityType.NO_RESET, "false"); capabilities.setCapability(MobileCapabilityType.APP, "my_app/build/app/outputs/apk/debug/app-debug.apk"); driver = new AndroidDriver(url, capabilities); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); System.out.println("Android Driver Initialized"); MobileElement pageHeading = (MobileElement) driver.findElement(By. xpath("//*[@content-desc='Flutter Demo Home Page']")); MobileElement countText = (MobileElement) driver.findElement(By. xpath("//*[@content-desc='You have pushed the button this many times:']")); MobileElement countValue = (MobileElement) driver.findElement(By. xpath("//*[@content-desc='You have pushed the button this many times:']/following-sibling::android.view.View")); MobileElement incrementButton = (MobileElement) driver.findElement(By. xpath("//*[@content-desc='Increment']")); Assert.assertTrue(pageHeading.isDisplayed()); Assert.assertTrue(countText.isDisplayed()); Assert.assertEquals(countValue.getAttribute("content-desc"), "0"); System.out.println("Asserted Initial Count: 0"); Assert.assertTrue(incrementButton.isDisplayed()); incrementButton.click(); System.out.println("Clicked Increment"); Thread.sleep(5*1000); Assert.assertEquals(countValue.getAttribute("content-desc"), "1"); System.out.println("Asserted Updated Count: 1"); System.out.println("Android Test: Success"); } ... }
Оставайтесь с нами для части 2, истории iOS, и вот она — https://sandeepqaops.medium.com/flutter-ios-app-test-automation-using-appium-java-client-61d1364d4562
Удачной автоматизации тестирования!