
Блог ⋅ Документы ⋅ Обучающий концентратор ⋅ Информационный бюллетень ⋅ сертификации ⋅ youtube
Appium - это инструмент для автоматизации собственных, мобильных веб -и гибридных приложений на платформах iOS, Android и Windows. Он поддерживает нативные приложения для iOS, написанные в приложениях Objective-C или Swift и Android, написанных на Java или Kotlin. Он также поддерживает мобильные веб-приложения, доступные с использованием мобильного браузера (Appium поддерживает Safari на iOS и Chrome или встроенное приложение «браузер» на Android). Выполните тесты на автоматизацию Appium в онлайн -облаке LambDatest.
Совет: если у вас нет файла .apk или .ipa , вы можете запустить свои образцы тестов на rambdatest с помощью нашего образца? Приложение для Android или пример? Приложение iOS.
Вот список языков и фреймворков, которые поддерживаются LambDatest для запуска тестов Appium Automation на LambDatest Real Device Cloud Platform.
| Ява | PHP | Рубин | C# | Питон | JavaScript |
|---|---|---|---|---|---|
| Юнит | PHP | Огурец | C# | Вести себя | Webdriverio |
| Робот |
Мы поддерживаем все языки и рамки, которые совместимы с Appium, поэтому в случае, если ваш любимый нет в таблице. Не волнуйтесь, вы все равно можете запустить тест. Свяжитесь с нами за любой помощью.
Примечание: мы готовим документацию для получения дополнительной информации. Если вы хотите, чтобы мы определили приоритеты в документации вашей предпочтительной структуры, не стесняйтесь выкрикивать .
Загрузите свое приложение для iOS (файл .ipa) или приложение для Android (файл .apk) на LambDatest Servers, используя наш API REST . Вы должны предоставить свое имя пользователя и AccessKey в Username:AccessKey в команде Curl для аутентификации. Обязательно добавьте путь AppFile в запрос Curl. Вот пример запроса скручивания для загрузки вашего приложения с помощью нашего API REST:
Для MacOS/Linux:
curl - u "{username}:{accesskey}"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'appFile=@"/Users/{desktop_username}/Desktop/LT_Java_Appium/proverbial_android.apk"'Для Windows:
curl - u "{username}:{accesskey}" - X POST "https://manual-api.lambdatest.com/app/upload/realDevice" - F "appFile=@" / Users / Desktop_username / Desktop / LT_Java_Appium / proverbial_android . apk ""Использование приложения URL:
Для MacOS/Linux:
curl - u "${ YOUR_LAMBDATEST_USERNAME()}:${ YOUR_LAMBDATEST_ACCESS_KEY()}"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'url="https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk"'Для Windows:
curl - u "${ YOUR_LAMBDATEST_USERNAME()}:${ YOUR_LAMBDATEST_ACCESS_KEY()}"
- X POST "https://manual-api.lambdatest.com/app/upload/realDevice"
- d "{"url":"https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk",
"name":"sample.apk"'Информация примечания:
Ответ вышеупомянутого Curl будет объектом JSON , содержащим App URL формата - lt: // app123456789123456789 и будет использоваться на следующем этапе.
Вот пример сценария автоматизации в Java для примера приложения, загруженного выше. Убедитесь, что обновлять app_url , username и accesskey в приведенном ниже коде.
import io . appium . java_client . AppiumDriver ;
import io . appium . java_client . MobileBy ;
import io . appium . java_client . MobileElement ;
import io . appium . java_client . android . AndroidElement ;
import org . openqa . selenium . remote . DesiredCapabilities ;
import org . openqa . selenium . support . ui . ExpectedConditions ;
import org . openqa . selenium . support . ui . WebDriverWait ;
import java . net . URL ;
import java . util . List ;
public class AndroidApp {
public static String userName = "username" ; //Enter your LT Username here
public static String accessKey = "accesskey" ; //Enter your LT AccessKey here
public String gridURL = "@mobile-hub.lambdatest.com/wd/hub" ;
String DeviceValue ;
String versionValue ;
String PlatformValue ;
@ org . testng . annotations . Parameters ( value = { "device" , "version" , "platform" })
public AndroidApp ( String device , String version , String platform ) {
try {
DeviceValue = device ;
versionValue = version ;
PlatformValue = platform ;
DesiredCapabilities capabilities = new DesiredCapabilities ();
capabilities . setCapability ( "build" , "ParallelSample Android" );
capabilities . setCapability ( "name" , platform + " " + device + " " + version );
capabilities . setCapability ( "deviceName" , device );
capabilities . setCapability ( "platformVersion" , version );
capabilities . setCapability ( "platformName" , platform );
capabilities . setCapability ( "isRealMobile" , true );
//AppURL (Create from Wikipedia.apk sample in project)
capabilities . setCapability ( "app" , "app url" ); //Enter your app URL from previous step here
capabilities . setCapability ( "deviceOrientation" , "PORTRAIT" );
capabilities . setCapability ( "console" , true );
capabilities . setCapability ( "network" , true );
capabilities . setCapability ( "visual" , true );
capabilities . setCapability ( "devicelog" , true );
String hub = "https://" + userName + ":" + accessKey + gridURL ;
AppiumDriver driver = new AppiumDriver ( new URL ( hub ), capabilities );
MobileElement color = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/color" );
//Changes color
color . click ();
//Back to black color
color . click ();
MobileElement text = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/Text" );
//Changes the text to proverbial
text . click ();
//toast is visible
MobileElement toast = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/toast" );
toast . click ();
//notification is visible
MobileElement notification = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/notification" );
notification . click ();
//Open the geolocation page
MobileElement geo = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/geoLocation" );
geo . click ();
Thread . sleep ( 5000 );
//takes back to home page
MobileElement home = ( MobileElement ) driver . findElementByAccessibilityId ( "Home" );
home . click ();
//Takes to speed test page
MobileElement speedtest = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/speedTest" );
speedtest . click ();
Thread . sleep ( 5000 );
MobileElement el10 = ( MobileElement ) driver . findElementByXPath ( "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.RelativeLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.RelativeLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[1]/android.view.View[3]/android.view.View[1]/android.view.View/android.widget.Button" );
el10 . click ();
Thread . sleep ( 25000 );
MobileElement el11 = ( MobileElement ) driver . findElementByXPath ( "//android.widget.FrameLayout[@content-desc= " Home " ]/android.widget.FrameLayout/android.widget.ImageView" );
el11 . click ();
//Opens the browser
MobileElement browser = ( MobileElement ) driver . findElementByAccessibilityId ( "Browser" );
browser . click ();
MobileElement el13 = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/url" );
el13 . sendKeys ( "www.lambdatest.com" );
MobileElement el14 = ( MobileElement ) driver . findElementById ( "com.lambdatest.proverbial:id/find" );
el14 . click ();
driver . quit ();
} catch ( Exception t ) {
System . out . println ();
}
}
} import io . appium . java_client . AppiumDriver ;
import io . appium . java_client . MobileElement ;
import org . openqa . selenium . JavascriptExecutor ;
import org . openqa . selenium . remote . DesiredCapabilities ;
import java . net . URL ;
public class iOSApp {
public static String userName = "username" ; //Enter your LT Username here
public static String accessKey = "accesskey" ; //Enter your LT AccessKey here
public String gridURL = "@mobile-hub.lambdatest.com/wd/hub" ;
String DeviceValue ;
String versionValue ;
String PlatformValue ;
AppiumDriver driver ;
@ org . testng . annotations . Parameters ( value = { "device" , "version" , "platform" })
public iOSApp ( String device , String version , String platform ) {
try {
DeviceValue = device ;
versionValue = version ;
PlatformValue = platform ;
DesiredCapabilities capabilities = new DesiredCapabilities ();
capabilities . setCapability ( "build" , "ParallelSample iOS" );
capabilities . setCapability ( "name" , platform + " " + device + " " + version );
capabilities . setCapability ( "deviceName" , device );
capabilities . setCapability ( "platformVersion" , version );
capabilities . setCapability ( "platformName" , platform );
capabilities . setCapability ( "isRealMobile" , true );
//AppURL (Create from proverbial.ipa sample in project)
capabilities . setCapability ( "app" , "app url" ); //Enter your app URL from previous step here
capabilities . setCapability ( "deviceOrientation" , "PORTRAIT" );
capabilities . setCapability ( "console" , true );
capabilities . setCapability ( "network" , true );
capabilities . setCapability ( "visual" , true );
capabilities . setCapability ( "devicelog" , true );
//capabilities.setCapability("geoLocation", "HK");
String hub = "https://" + userName + ":" + accessKey + gridURL ;
driver = new AppiumDriver ( new URL ( hub ), capabilities );
MobileElement color = ( MobileElement ) driver . findElementByAccessibilityId ( "Colour" );
//Changes color
color . click ();
//Back to black color
color . click ();
MobileElement text = ( MobileElement ) driver . findElementByAccessibilityId ( "Text" );
//Changes the text to proverbial
text . click ();
//toast is visible
MobileElement toast = ( MobileElement ) driver . findElementByAccessibilityId ( "Toast" );
toast . click ();
//notification is visible
MobileElement notification = ( MobileElement ) driver . findElementByAccessibilityId ( "Notification" );
notification . click ();
//Open the geolocation page
MobileElement geo = ( MobileElement ) driver . findElementByAccessibilityId ( "GeoLocation" );
geo . click ();
Thread . sleep ( 5000 );
//Takes back
driver . navigate (). back ();
//Takes to speed test page
MobileElement speedtest = ( MobileElement ) driver . findElementByAccessibilityId ( "Speed Test" );
speedtest . click ();
Thread . sleep ( 5000 );
MobileElement el10 = ( MobileElement ) driver . findElementByAccessibilityId ( "start speed test - connection type multi" );
el10 . click ();
Thread . sleep ( 25000 );
driver . navigate (). back ();
//Opens the browser
MobileElement browser = ( MobileElement ) driver . findElementByAccessibilityId ( "Browser" );
browser . click ();
Thread . sleep ( 3000 );
MobileElement el4 = ( MobileElement ) driver . findElementByAccessibilityId ( "Search" );
el4 . click ();
el4 . sendKeys ( "Lambdatest" );
(( JavascriptExecutor ) driver ). executeScript ( "lambda-status=passed" );
driver . quit ();
} catch ( Exception t ) {
System . out . println ();
(( JavascriptExecutor ) driver ). executeScript ( "lambda-status=failed" );
driver . quit ();
}
}
}.XML для запуска вашего тестирования и определения возможностей устройства. Пожалуйста, найдите пример кода ниже для того же. <? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
< suite thread-count = " 100 " name = " Mobile " parallel = " tests " >
< test name = " AppTest 1 " >
< parameter name = " version " value = " 11 " />
< parameter name = " platform " value = " Android " />
< parameter name = " device " value = " Galaxy S21 Ultra 5G " />
< classes >
< class name = " AndroidApp " />
</ classes >
</ test >
< test name = " AppTest 2 " >
< parameter name = " version " value = " 11 " />
< parameter name = " platform " value = " Android " />
< parameter name = " device " value = " Galaxy S21 " />
< classes >
< class name = " AndroidApp " />
</ classes >
</ test >
</ suite ><? xml version = " 1.0 " encoding = " UTF-8 " ?>
<! DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
< suite thread-count = " 100 " name = " Mobile " parallel = " tests " >
< test name = " iOSApp 1 " >
< parameter name = " version " value = " 14 " />
< parameter name = " platform " value = " iOS " />
< parameter name = " device " value = " iPhone 11 " />
< classes >
< class name = " iOSApp " />
</ classes >
</ test >
< test name = " iOSApp 2 " >
< parameter name = " version " value = " 14 " />
< parameter name = " platform " value = " iOS " />
< parameter name = " device " value = " iPhone 12 Pro " />
< classes >
< class name = " iOSApp " />
</ classes >
</ test >
</ suite > Отлаживать и запустите свой код. Запустите iOSApp.java или AndroidApp.java в вашем редакторе.
После того, как вы запустите свои тесты, вы можете просмотреть выполнение теста вместе с журналами. Вы сможете увидеть проходящие или провальные тестовые случаи. Вы можете просмотреть то же самое в Lambdatest Automation.
Пример возможностей для Android и iOS упоминаются ниже -
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "android" ,
"platformVersion" : "10" ,
"app" : "App_url" ,
"visual" : True ,
"console" : True ,
"deviceOrientation" : "PORTRAIT" ,
"build" : "new-12" ,
"isRealMobile" : True ,
} {
"deviceName": "iPhone 12 Mini",
"platformName": "ios",
"platformVersion": "14",
"app": "App_url",
"isRealMobile": True,
"visual": True,
"console": True,
"build": "lt-web-4",
"network": True,
}
Примечание: обязательные поля отмечены звездочкой *
| КЛЮЧ | ЦЕННОСТИ | Описание возможностей |
|---|---|---|
| *пользователь | Тип: строка | Ваше имя пользователя LT. |
| *AccessKey | Тип: строка | Ваш ключ доступа LT. |
| строить | Тип: строка По умолчанию: без названия build=iOS Small Run | Вы можете сгруппировать свои тесты, как задание, содержащая несколько тестов. |
| имя | Тип: строка По умолчанию: TestId теста. При условии, что имя не передается. name=iphone 6 Small Run | Название вашего теста. |
| проект | Останется пустым в случае, если «проект» не будет передаваться в возможности.project=Small Run | Вы можете сгруппировать свои сборки, как проект, содержащий несколько рабочих мест. |
| *DeviceName | Тип: строкаiPhone 13 | Название устройства. |
| *Платформовое имя | Тип: строкаios | Название ОС. |
| *Platformversion | Тип: строка14 | ОС версия. |
| *приложение | Тип: строкаapp=lt://APP100201061631704657918380 | Принимает URL -адрес приложения, возвращаемый после загрузки приложения на LambDatest Servers. |
| Queuetimeout | Тип: строка По умолчанию: 600 queueTimeout=300 | Эта возможность может быть использована для изменения значения тайм -аута очереди в диапазоне. Queuetimeout Range: 300-900. |
| idletimeout | Тип: строка По умолчанию: 120 idleTimeout=120 | Эта возможность может быть использована для изменения значения тайм -аута. |
| визуальный | Тип: логический По умолчанию: ложь visual=TRUEИЛИ visual=FALSE | Команда от командных скриншотов будет записана на каждом этапе тестирования. По умолчанию флаг установлен как выключенный. Примечание. Время выполнения теста увеличится, если оно будет установлено как «true». |
| видео | Тип: логический По умолчанию: True video=TRUEИЛИ video=FALSE | Видеозапись полного экрана. |
| DeviceLog | Тип: логический По умолчанию: True devicelog=TRUEИЛИ devicelog=FALSE | Включить журналы устройства. |
| сеть | Тип: логический По умолчанию: True network=TRUEИЛИ network=FALSE | Включить сетевые журналы. |
| Deviceorientation | Тип: строкаdeviceOrientation=portraitИЛИ deviceOrientation=landscape | Измените ориентацию экрана устройства. |
| туннель | Тип: логическийtunnel=TRUEИЛИ tunnel=FALSE | Чтобы проверить локальные приложения с помощью rambdatest. |
| Туннелинамен | Тип: логическийtunnelName=RabbitHole | Название туннеля. |
| Выделенная пророк | Тип: логическийdedicatedProxy=TRUEИЛИ dedicatedProxy=FALSE | Выделенный прокси. |
| Autograntpermissions | Тип: логическийautoGrantPermissions=TRUEИЛИ autoGrantPermissions=FALSE | Попросите Appium автоматически определить, какие разрешения требуют вашему приложению, и предоставят их приложению при установке. По умолчанию ложно. Если Норесет правда, эта возможность не работает. |
| Autodismissalerts | Тип: логическийautoDismissAlerts=TRUEИЛИ autoDismissAlerts=FALSE | [только iOS] Аппийская возможность отклонять оповещения/всплывающие окна на устройствах iOS. |
| AutoAceptAlerts | Тип: логическийautoAcceptAlerts=TRUEИЛИ autoAcceptAlerts=FALSE | [Только iOS] возможность принять принять оповещения/всплывающие окна на устройствах iOS. |
| NewCommandTimeout | Тип: строка60 | Как долго (в секунды) Appium будет ждать новой команды от клиента, прежде чем предположить, что клиент уйдет и прекратит сеанс. |
| язык | Тип: строкаfr | Язык для установки для iOS (только для драйвера xcuitest) и Android. |
| локаль | Тип: строкаfr_CA, CA | Локаль, чтобы установить для iOS (только для драйвера xcuitest) и Android. FR_CA формат для iOS. Формат CA (название страны аббревиатура) для Android. |
| Норесет | Тип: логическийtrue | Не сбросите состояние приложения до этой сессии. Смотрите здесь для более подробной информации. |
| AutomationName | Тип: логический По умолчанию: Appium automationName = Appium | Какой механизм автоматизации использовать. ПРИМЕЧАНИЕ. Установите как false в коде автоматизации приложения, поэтому нельзя изменить. Appium (по умолчанию), или Uiautomator2, Espresso или Uiautomator1 для Android, или XCuitest или инструменты для iOS, или Youiengine для приложения, построенного с YouiEngine. |
| Eventtimings | Тип: логический По умолчанию: ложь true | Включить или отключить отчет о времени для различных событий Appium-Internal (например, начало и конец каждой команды и т. Д.). Чтобы включить, используйте True. Время сообщается в качестве свойства событий на ответ на запрос текущего сеанса. Смотрите документы о времени события для структуры этого ответа. |
| геолокация | Тип: строкаfr | Позволяет имитировать мобильное поведение из разных мест, выбирая IP -адреса, размещенные в нескольких странах мира. |
| Другие | Тип: массив струн По умолчанию: [] или пустой массив "otherApps":["lt://APP1002211081648217405891389","lt://APP1002211081648217429465823"] | «Принимает список URL -адреса приложения, возвращаемого после загрузки приложения на LambDatest Servers. Условия, которые должны быть удовлетворены: 1. Приложение также должно быть передано, если «другие аппс» пройдены. 2. Длина приложения URL массив <= 3. 3. на максимальном 3 приложения могут быть установлены. 4. Приложение не должно присутствовать внутри массива «Другое». 5. Не дублируется в массиве «Другое». |
Есть вопросы? Пожалуйста, обратитесь в нашу поддержку в чате 24x7 , или вы также можете отправить нам по почте по адресу поддержки по адресу @lambdatest.com.
Используя LambDatest Tunnel, вы можете протестировать локально и частные приложения на различных реальных устройствах Android и iOS на платформе автоматизации тестирования LambDatest Appium. LambDatest Tunnel использует протоколы, такие как Web Socket, HTTPS, SSH (Secure Shell) и многое другое, чтобы позволить вам создать безопасное и уникальное туннельное соединение между вашей локальной системой и LambDatest Cloud Servers.
В этой документации узнайте, как настроить LambDatest Tunnel для тестирования локально или частных приложений при выполнении автоматизации мобильных приложений.
Для тестирования приложений локально вам нужно будет настроить:
Связь с Lambdatest Tunnel.
Тестовые сценарии для работы через LambDatest Tunnel.
Ниже показаны шаги по настройке соединения с LambDatest Tunnel.
Извлеките загруженный двоичный файл.
Перейдите к командной строке и укажите на каталог/папку, где вы извлекли двоичный файл.
Запустите ниже команду в терминале.
. / LT -- user { user 's login email} --key {user' s access key } -- tunnelName { user 's tunnel name} После настройки соединения с LambDatest Tunnel вам нужно будет установить tunnel возможностей на True .
| Ключ | Ценности | Описание | Желаемая способность |
|---|---|---|---|
| туннель | Верно/Неверно | Настройте туннель | "tunnel" : True, |
Вы также можете добавить возможности tunnel , используя генератор LambDatest.
В случае, если у вас есть какие -либо вопросы или вам нужна дополнительная информация, бросьте их на нашу поддержку в чате 24x7 или отправьте нам по почте нам напрямую по адресу [email protected].
Инспектор по графическим интерфейсу для мобильных приложений и многое другое, питается (отдельно установлен) сервер Appium . Appium Inspector - это клиент Appium (например, Webdriverio, клиент Appium Java, Appium Python Client и т. Д.) С пользовательским интерфейсом. Мы можем использовать интерфейс для определения версии сервера Appium, настройки возможностей. Как только сервер Appium будет запущен и работает с приложением, мы можем взаимодействовать с элементами и запускать другие команды Appium.
К концу этой темы вы сможете:
Загрузите свое приложение для iOS (файл .ipa) или приложение для Android (файл .apk) на LambDatest Servers, используя наш API REST . Вы должны предоставить свое имя пользователя и AccessKey в Username:AccessKey в команде Curl для аутентификации. Обязательно добавьте путь AppFile в запрос Curl. Вот пример запроса скручивания для загрузки вашего приложения с помощью нашего API REST:
Использование файла приложения:
Для iOS:
curl - u "{usename}:{accesskey}"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'url="https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk"'Для Windows:
curl - u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" - X POST "https://manual-api.lambdatest.com/app/upload/realDevice" - F "appFile=@" / Users / macuser / Downloads / proverbial_android . apk "'Использование приложения URL:
Для MacOS/Linux:
curl - u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY"
-- location -- request POST 'https: //manual-api.lambdatest.com/app/upload/realDevice'
-- form 'name="Android_App"'
-- form 'url="https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk"'Для Windows:
curl - u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" - X POST "https://manual-api.lambdatest.com/app/upload/realDevice" - d "url":"https://prod-mobile-artefacts.lambdatest.com/assets/docs/proverbial_android.apk","name":"sample.apk"'Кончик:
App URL формата - lt: // app123456789123456789 и будет использоваться на следующем этапе.Запустите Appium Inspector и выберите LambDatest в списке поставщиков облачных тестов.
Введите свой ключ имени пользователя и доступа. Вы можете найти учетные данные, доступные на Lambdatest Dashboard
Настройте LambDatest возможностей на вкладке «Желаемые возможности» на Appium Inspector. Используйте уникальный URL -адрес приложения, полученный на шаге 1, чтобы установить значение возможности приложения. Здесь доступен список всех возможностей, поддерживаемых LambDatest
В качестве альтернативы, мы также можем перейти к нашему генератору возможностей и генерировать представление о возможностях с помощью графического интерфейса.

Как только это будет завершено, теперь вы можете запустить тест, нажав на начало сеанса. После того, как вы запустите сеанс, видеозапись видео вместе с подробной информацией и журналами тестового прогона будет доступна на Dambdatest Dashboard.

Есть вопросы?
Пожалуйста, обратитесь в нашу поддержку в чате 24x7 , или вы также можете отправить нам по почте по адресу поддержки по адресу @lambdatest.com.
В этой документации мы рассмотрим некоторые API, которые помогут вам оптимизировать ваш рабочий процесс тестирования мобильных приложений. Если вы выполняете живое или автоматическое тестирование приложений, вы можете использовать эти API для извлечения и удаления приложений.
Чтобы получить список ваших загруженных приложений вместе с их идентификаторами приложения, запустите приведенную команду Curl.
curl -- location -- request GET 'https://YOUR_LAMBDATEST_USERNAME:[email protected]/app/data?type=ios&level=user'Ниже показан ответ на приведенный выше запрос скручивания.
{ "metaData" : { "type" : "ios" , "total" : 1 } ,
"data" : [ {
"app_id" : "APP100245789181570497850" ,
"name" : "proverbial_ios.ipa" ,
"type" : "ios" ,
"updated_at" : "2022-05-10T11:19:30.000Z" ,
"shared" : false ,
"source" : "web-client"
} ] Чтобы удалить ваши Uploded Apps, запустите приведенное ниже команду Curl.
curl -- location -- request DELETE 'https: //YOUR_LAMBDATEST_USERNAME:[email protected]/app/delete'
-- header 'Content-Type: application/json'
-- data - raw ' {
"appIds" : "APPID1,APPID2"
} 'Ниже показан ответ на приведенный выше запрос скручивания.
{ "message" : "Deleted successfully." }Вот и все! В случае, если у вас есть какие -либо вопросы или вам нужна дополнительная информация, вы можете обратиться в нашу поддержку в чате 24x7 или отправить нам по почте напрямую по адресу [email protected].
LambDatest предлагает онлайн -сеть Appium Automation для выполнения автоматизации приложений. Онлайн -сетка Appium доступна на местной сетке, браустаке, Saucelabs и Lambdatest. Таким образом, вы можете без усилий перенести свои текущие сценарии автоматизации Appium Automation (или на люксах) из локальной сетки, лаборатории Sauce Labs или BrowserStack в LambDatest.
В этой документации мы рассмотрим, как использовать LambDatest Cloud для автоматизации приложений и переносить ваши тестовые сценарии (или тестовые люксы) из вашей местной сетки, соус -лаборатории или браузстука. Вы можете использовать желаемые возможности LambDatest в ваших тестах, аутентифицировать свой тестовый сеанс и выполнить тесты в облаке.
Перемещение вашей нынешней локальной сетки, BroweseStack или Sauce Labs в LambDatest требует нескольких настроек в вашем коде. В этом руководстве мы рассмотрим, как использовать желаемые возможности LambDatest в ваших тестах, аутентифицируйте свой тестовый сеанс и выполнить тесты в наших облачных браузерах.
Чтобы перейти из локальной сетки, BroweseStack или Sauce Labs в LambDatest, вам необходимо внести некоторые изменения в ваши тестовые люксы, такие как аутентификация, желаемые возможности и т. Д.
Во -первых, вам необходимо изменить аутентификацию в настройках конфигурации вашего тестового набора. Для выполнения тестов на лямбдейской сетке Appium вам необходимо иметь действительный user_name и access_key для выполнения тестов в нашей облачной сетке. Если у вас нет учетной записи на LambDatest, посетите страницу rambdatest регистрации и создайте новую учетную запись.
Ниже приведены изменения в параметрах:
Вы можете найти ключ Username и Access Key в разделе профиля LambDatest на панели инструментов автоматизации .

При миграции из браузстука или соуселабов в ляп -датчик вам необходимо внести следующие изменения в существующем коде:
Вот бок о бок сравнение каждой из областей, которые мы выделили выше:
| Свойство | Тип | Браузрстук | Saucelabs | Rambdatest |
|---|---|---|---|---|
| Имя пользователя | Нить | Имя пользователя, чтобы получить доступ к Appium Grid на браустаке | Имя пользователя для доступа к сетке Appium на лаборатории соуса | Имя пользователя для доступа к Appium Grid на rambdatest |
| AccessKey | Нить | AcceptQue для доступа к Appium Grid на браузстуке | AccessKey для доступа к Appium Grid на Sauce Labs | AcceptQue для доступа к Appium Grid на rambdatest |
| Hub Url | Нить | @hub-cloud.browserstack.com/wd/hub | ondemand.us-west-1.saucelabs.com/wd/hub | @hub.lambdatest.com/wd/hub |
Для реализации на основе Python есть изменения в сценарии для процесса аутентификации.
Браузрстук
userName = "BrowserStack_UserName"
accessKey = "BrowserStack_AccessKey"Saucelabs
userName = "SAUCE_USERNAME"
accessKey = "SAUCE_ACCESS_KEY"Rambdatest
userName = "LambdaTest_UserName"
accessKey = "LambdaTest_AccessKey"Теперь вам нужно изменить URL -хаб в настройках конфигурации вашего тестового набора. URL Hub имеет тип строки и определяет местоположение концентратора, в которое будут маршрутизированы испытания Appium для выполнения.
Для реализации, основанной на Python, вот изменения в сценарии для HUB URL.
Браузрстук
@hub-cloud.browserstack.com/wd/hub
Saucelabs
@ondemand.us-west-1.saucelabs.com/wd/hub
Rambdatest
@mobile-hub.lambdatest.com/wd/hub
Генератор возможностей позволяет указать желаемые возможности (или возможности), которые являются параметрами конфигурации, которые позволяют указать следующее:
Вы также можете выбрать другие расширенные параметры, доступные в генераторе LambDatest.
Для миграции мы сдали тесты на основе Java. Ниже приведены скриншоты генератора возможностей BrowerStack и LambDatest.



Сравнение возможностей, генерируемых генератором Browesstack и LambDatest Generator:
| Возможности | Браузрстук | Saucelabs | Rambdatest |
|---|---|---|---|
| Устройство | устройство | DeviceName | DeviceName |
| Операционная система | OS_VERSION | Платформаверсия | Платформаверсия |
Ниже приведен обзор сравнения желаемых возможностей для языка Java:
Браузрстук
//demo.java
DesiredCapabilities capabilities = new DesiredCapabilities ( ) ;
capabilities . setCapability ( "os_version" , "9.0" ) ;
capabilities . setCapability ( "device" , "Google Pixel 3" ) ;
capabilities . setCapability ( "browserstack.appium_version" , "1.21.0" ) ;Saucelabs
//demo.java
MutableCapabilities caps = new MutableCapabilities ();
caps . setCapability ( "platformName" , "Android" );
caps . setCapability ( "browserName" , "Chrome" );
caps . setCapability ( "appium:deviceName" , "Google Pixel 3 GoogleAPI Emulator" );
caps . setCapability ( "appium:platformVersion" , "12.0" );
MutableCapabilities sauceOptions = new MutableCapabilities ();
sauceOptions . setCapability ( "appiumVersion" , "1.21.0" );
caps . setCapability ( "sauce:options" , sauceOptions );Rambdatest
//demo.java
DesiredCapabilities capabilities = new DesiredCapabilities ( ) ;
capabilities . setCapability ( "build" , "your build name" ) ;
capabilities . setCapability ( "name" , "your test name" ) ;
capabilities . setCapability ( "platformName" , "Android" ) ;
capabilities . setCapability ( "deviceName" , "Google Pixel 3" ) ;
capabilities . setCapability ( "isRealMobile" , true ) ;
capabilities . setCapability ( "platformVersion" , "9" ) ;Давайте посмотрим на пример, который показывает весь процесс миграции. Тестовый сценарий состоит в том, чтобы открыть приложение из Википедии, которое ищет термин «rambdatest». Следующий тест выполняется на Google Pixel 3 под управлением Android 11.
from appium import webdriver
from appium . webdriver . common . mobileby import MobileBy
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
import time
userName = "BrowserStack_UserName"
accessKey = "BrowserStack_AccessKey"
desired_caps = {
"build" : "Python Android" ,
"device" : "Google Pixel 3" ,
"app" : "<app_url>"
}
driver = webdriver . Remote ( "https://" + userName + ":" + accessKey + "@hub-cloud.browserstack.com/wd/hub" , desired_caps )
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "BrowserStack" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name ( "android.widget.TextView" )
assert ( len ( search_results ) > 0 )
driver . quit () #samplewikipedia.py
import ssl
try :
_create_unverified_https_context = ssl . _create_unverified_context
except AttributeError :
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else :
# Handle target environment that doesn't support HTTPS verification
ssl . _create_default_https_context = _create_unverified_https_context
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities browser, device and OS combinations where the test will run
caps = {
caps [ 'platformName' ] = 'Android'
caps [ 'browserName' ] = 'Chrome'
caps [ 'appium:deviceName' ] = 'Google Pixel 3a GoogleAPI Emulator'
caps [ 'appium:platformVersion' ] = '11.0'
caps [ 'sauce:options' ] = {}
caps [ 'sauce:options' ][ 'appiumVersion' ] = '1.20.2'
}
# run_session function searches for 'saucelabs' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
command_executor = "https://SAUCE_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )
# driver.get("https://www.ifconfig.me")
# time.sleep(10)
# Test case for the saucelabs sample Android app.
# If you have uploaded your app, update the test case here.
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "saucelabs" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name (
"android.widget.TextView" )
assert ( len ( search_results ) > 0 )
# Invoke driver.quit() after the test is done to indicate that the test is completed.
driver . quit ()
# The Thread function takes run_session function and each set of capability from the caps array as an argument to run each session in parallel
for cap in caps :
Thread ( target = run_session , args = ( cap ,)). start () #samplewikipedia.py
import ssl
try :
_create_unverified_https_context = ssl . _create_unverified_context
except AttributeError :
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else :
# Handle target environment that doesn't support HTTPS verification
ssl . _create_default_https_context = _create_unverified_https_context
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities browser, device and OS combinations where the test will run
caps = [
{
"deviceName" : "Google Pixel 3" ,
"platformName" : "Android" ,
"platformVersion" : "11" ,
"app" : "<lt_app_url>" ,
"isRealMobile" : True ,
"deviceOrientation" : "PORTRAIT" ,
"build" : "Demo" ,
},
]
# run_session function searches for 'lambtest' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
# hub.mobile-dev-1.dev.lambdatest.io/wd/hub",
command_executor = "https://LT_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )
# driver.get("https://www.ifconfig.me")
# time.sleep(10)
# Test case for the lambdatest sample Android app.
# If you have uploaded your app, update the test case here.
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "lambdatest" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name (
"android.widget.TextView" )
assert ( len ( search_results ) > 0 )
# Invoke driver.quit() after the test is done to indicate that the test is completed.
driver . quit ()
# The Thread function takes run_session function and each set of capability from the caps array as an argument to run each session in parallel
for cap in caps :
Thread ( target = run_session , args = ( cap ,)). start ()Большая часть реализации, как показано выше, остается неизменной. Произведены только изменения в инфраструктуре (т.е. вместо браустака, тесты автоматизации приложений будут запущены на rambdatest).
Давайте проанализируем, что изменилось с точки зрения реализации.
Браузрстук
from appium import webdriver
from appium . webdriver . common . mobileby import MobileBy
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
import time
userName = "BrowserStack_UserName"
accessKey = "BrowserStack_AccessKey"
desired_caps = {
"build" : "Python Android" ,
"device" : "Google Pixel 3" ,
"app" : "<app_url>"
}
driver = webdriver . Remote ( "https://" + userName + ":" + accessKey + "@hub-cloud.browserstack.com/wd/hub" , desired_caps )Saucelabs
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities browser, device and OS combinations where the test will run
caps = {
caps [ 'platformName' ] = 'Android'
caps [ 'browserName' ] = 'Chrome'
caps [ 'appium:deviceName' ] = 'Google Pixel 3a GoogleAPI Emulator'
caps [ 'appium:platformVersion' ] = '11.0'
caps [ 'sauce:options' ] = {}
caps [ 'sauce:options' ][ 'appiumVersion' ] = '1.20.2'
}
# run_session function searches for 'saucelabs' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
command_executor = "https://SAUCE_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )Rambdatest
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
caps = [
{
"deviceName" : "Google Pixel 3" ,
"platformName" : "Android" ,
"platformVersion" : "11" ,
"app" : "<lt_app_url>" ,
"build" : "Demo" ,
},
]
def run_session ( desired_cap ):
driver = webdriver . Remote ( command_executor = "https://LT_USERNAME:[email protected]/wd/hub" , desired_capabilities = desired_cap )Мы обсудили, как мигрировать из лаборатории Sauce Labs или BrowserStack в LambDatest. Давайте рассмотрим, как мигрировать из локальной сетки в облачную сетку Appium.
Желаемые возможности Appium представляют собой коллекцию пар ключей, завернутых в объект JSON. Эти пары клавиш запрашивают сервер Appium для необходимой сеанса автоматизации тестирования.
Допустим, вы хотите запустить тест приложения в Python на Tab Samsung Galaxy Tab S4, работающий на Android 10. Вы можете определить то же самое в виде возможностей, как указано ниже.
caps = [
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "Android" ,
"platformVersion" : "10" ,
"build" : "Demo" ,
},
]Для начала измените аутентификацию в настройках конфигурации вашего тестового набора. Чтобы запустить тесты на LambDatest Appium Grid, вам нужно действительное имя пользователя и ключ доступа. Если вы уже выполняли тесты в своей локальной сетке, вам нужно будет изменить свой тестовый скрипт, чтобы инициализировать драйвер Appium вместе с желаемыми возможностями.
Передайте возможности в @hub.lambdatest.com/wd/hub с вашими деталями аутентификации Lambdatest, и вы готовы. Вот образцы испытательного сценария Python.
#samplewikipedia.py
import ssl
try :
_create_unverified_https_context = ssl . _create_unverified_context
except AttributeError :
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else :
# Handle target environment that doesn't support HTTPS verification
ssl . _create_default_https_context = _create_unverified_https_context
from threading import Thread
import time
from selenium import webdriver
from selenium . webdriver . common . keys import Keys
from selenium . webdriver . common . desired_capabilities import DesiredCapabilities
from selenium . common . exceptions import TimeoutException
from selenium . webdriver . support . ui import WebDriverWait
from selenium . webdriver . support import expected_conditions as EC
from appium . webdriver . common . mobileby import MobileBy
from appium import webdriver
# This array 'caps' defines the capabilities of the browser, device, and OS combinations where the test will run
caps = [
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "Android" ,
"platformVersion" : "10" ,
"app" : "lt://APP10051525539885437397" ,
"isRealMobile" : True ,
"deviceOrientation" : "PORTRAIT" ,
"visual" : True ,
"console" : True ,
"build" : "Demo" ,
},
]
# run_session function searches for 'lambdatest' on google.com
def run_session ( desired_cap ):
driver = webdriver . Remote (
# hub.mobile-dev-1.dev.lambdatest.io/wd/hub",
command_executor = "https://LT_USERNAME:[email protected]/wd/hub" ,
desired_capabilities = desired_cap )
# driver.get("https://www.ifconfig.me")
# time.sleep(10)
# Test case for the lambdatest sample Android app.
# If you have uploaded your app, update the test case here.
search_element = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ACCESSIBILITY_ID , "Search Wikipedia" ))
)
search_element . click ()
search_input = WebDriverWait ( driver , 30 ). until (
EC . element_to_be_clickable (
( MobileBy . ID , "org.wikipedia.alpha:id/search_src_text" ))
)
search_input . send_keys ( "lambdatest" )
time . sleep ( 5 )
search_results = driver . find_elements_by_class_name (
"android.widget.TextView" )
assert ( len ( search_results ) > 0 )
# Invoke driver.quit() after the test is done to indicate that the test is completed.
driver . quit ()
# The Thread function takes run_session function and each set of capability from the caps array as an argument to run each session in parallel
for cap in caps :
Thread ( target = run_session , args = ( cap ,)). start ()Вот и все! В случае, если у вас есть какие -либо вопросы или вам нужна дополнительная информация, вы можете обратиться в нашу поддержку в чате 24x7 или отправить нам по почте напрямую по адресу [email protected].
Посетите следующие ссылки, чтобы узнать больше о функциях LambDatest, настройке и учебных пособиях, касающихся автоматизации тестирования, тестирования мобильных приложений, отзывчивого тестирования и ручного тестирования.
Lambdatest Community позволяет людям взаимодействовать с техническими энтузиастами. Подключитесь, задавайте вопросы и учитесь у технических людей. Обсудите лучшие практики в области веб -разработки, тестирования и DevOps с профессионалами со всего мира?
Чтобы оставаться в курсе последних функций и дополнений продукта, посетите Changelog
LambDatest - это ведущая платформа для выполнения тестирования и оркестровки, которая является быстрой, надежной, масштабируемой и безопасной. Это позволяет пользователям запускать как ручное, так и автоматическое тестирование веб -приложений и мобильных приложений в 3000+ различных браузерах, операционных системах и реальных комбинациях устройств. Используя LambDatest, предприятия могут обеспечить более быструю обратную связь за разработчика и, следовательно, быстрее идти на рынок. Более 500 предприятий и 1 миллион + пользователи в 130 странах полагаются на rabdatest для своих потребностей в тестировании.
