
المدونة ⋅ مستندات ⋅ التعلم محور ⋅ النشرة الإخبارية ⋅ شهادات ⋅ youtube
Appium هي أداة لأتمتة تطبيقات الويب الأصلية والهاتف المحمول والهجين على منصات iOS و Android و Windows. إنه يدعم تطبيقات iOS الأصلية المكتوبة في تطبيقات Objective-C أو Swift و Android الأصلية المكتوبة في Java أو Kotlin. كما يدعم تطبيقات الويب المحمولة التي يتم الوصول إليها باستخدام متصفح الهاتف المحمول (يدعم Appium Safari على iOS و Chrome أو تطبيق "Browser" المدمج على Android). إجراء اختبارات أتمتة Appium على السحابة عبر الإنترنت في Lambdatest.
نصيحة: إذا لم يكن لديك أي ملف .APK أو .IPA ، يمكنك تشغيل اختبارات عينة على Lambdatest باستخدام نموذجنا؟ تطبيق Android أو عينة؟ تطبيق iOS.
فيما يلي قائمة باللغات والأطر التي تدعمها Lambdatest لتشغيل اختبارات أتمتة Appium على منصة Lambdatest الحقيقية السحابية.
| جافا | PHP | روبي | ج# | بيثون | جافا سكريبت |
|---|---|---|---|---|---|
| جونيت | PHP | خيار | ج# | تتصرف | WebDriverio |
| روبوت |
نحن ندعم جميع اللغات والأطر المتوافقة مع Appium ، لذلك في حالة عدم وجود مفضلك في الجدول. لا تقلق ، لا يزال بإمكانك إجراء الاختبار. اتصل بنا للحصول على أي مساعدة.
ملاحظة: نحن نقوم بإعداد الوثائق لمزيد من الأطر. إذا كنت تريد منا إعطاء الأولوية لتوثيق إطارك المفضل ، فلا تتردد في منحنا الصراخ .
قم بتحميل تطبيق iOS (ملف .IPA) أو تطبيق Android (ملف .APK) إلى خوادم Lambdatest باستخدام API REST . تحتاج إلى توفير اسم المستخدم الخاص بك و AccessKey في تنسيق Username:AccessKey في أمر Curl للمصادقة. تأكد من إضافة مسار AppFile في طلب Curl. فيما يلي مثال على طلب Curl لتحميل تطبيقك باستخدام API REST لدينا:
لماكوس/لينكس:
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 APP:
لماكوس/لينكس:
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.
تم ذكر إمكانيات العينة لكل من 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,
}
ملاحظة: يتم تمييز الحقول الإلزامية مع النجمة *
| مفتاح | قيم | وصف القدرة |
|---|---|---|
| *مستخدم | اكتب: سلسلة | اسم المستخدم الخاص بك. |
| *AccessKey | اكتب: سلسلة | مفتاح الوصول إلى LT. |
| يبني | اكتب: سلسلة الافتراضي: بلا عنوان build=iOS Small Run | يمكنك تجميع اختباراتك مثل وظيفة تحتوي على اختبارات متعددة. |
| اسم | اكتب: سلسلة الافتراضي: اختبار الاختبار. في حالة عدم تمرير الاسم. name=iphone 6 Small Run | اسم الاختبار الخاص بك. |
| مشروع | سيبقى فارغًا في حالة "المشروع" لا يتم تمريره في القدرة.project=Small Run | يمكنك تجميع بنياتك مثل مشروع يحتوي على وظائف متعددة. |
| *devicename | اكتب: سلسلةiPhone 13 | اسم الجهاز. |
| *platformName | اكتب: سلسلةios | اسم نظام التشغيل. |
| *منصة | اكتب: سلسلة14 | إصدار OS. |
| *برنامج | اكتب: سلسلةapp=lt://APP100201061631704657918380 | يقبل عنوان URL App بعد تحميل تطبيق على خوادم Lambdatest. |
| QueUeTimeout | اكتب: سلسلة الافتراضي: 600 queueTimeout=300 | يمكن استخدام هذه القدرة لتعديل قيمة مهلة قائمة الانتظار داخل النطاق. مجموعة QueUeTimeout: 300-900. |
| idletimeout | اكتب: سلسلة الافتراضي: 120 idleTimeout=120 | يمكن استخدام هذه القدرة لتعديل قيمة المهلة. |
| مرئي | النوع: منطقية الافتراضي: خطأ visual=TRUEأو visual=FALSE | سيتم تسجيل الأمر بواسطة لقطات الشاشة في كل خطوة اختبار. بشكل افتراضي ، يتم تعيين العلم على أنه OFF. ملاحظة: سيزداد وقت تنفيذ الاختبار إذا تم تعيينه على أنه "صحيح". |
| فيديو | النوع: منطقية الافتراضي: صحيح video=TRUEأو video=FALSE | تسجيل الفيديو للشاشة الكاملة. |
| Devicelog | النوع: منطقية الافتراضي: صحيح devicelog=TRUEأو devicelog=FALSE | تمكين سجلات الجهاز. |
| شبكة | النوع: منطقية الافتراضي: صحيح network=TRUEأو network=FALSE | تمكين سجلات الشبكة. |
| Deviceorientation | اكتب: سلسلةdeviceOrientation=portraitأو deviceOrientation=landscape | تغيير اتجاه الشاشة للجهاز. |
| نفق | النوع: منطقيةtunnel=TRUEأو tunnel=FALSE | لاختبار التطبيقات المحلية مع Lambdatest. |
| Tunnelname | النوع: منطقيةtunnelName=RabbitHole | اسم النفق. |
| مخصصة Proxy | النوع: منطقيةdedicatedProxy=TRUEأو dedicatedProxy=FALSE | وكيل مخصص. |
| عطلات AutograntPermiss | النوع: منطقيةautoGrantPermissions=TRUEأو autoGrantPermissions=FALSE | اطلب من Appium تلقائيًا تحديد الأذونات التي يتطلبها تطبيقك ومنحها للتطبيق عند التثبيت. الإعدادات الافتراضية إلى خطأ. إذا كانت Noreset صحيحة ، فإن هذه القدرة لا تعمل. |
| AutoDismissAssalerts | النوع: منطقيةautoDismissAlerts=TRUEأو autoDismissAlerts=FALSE | [iOS فقط] القدرة على رفض التنبيهات/المنبثقة على أجهزة iOS. |
| AutoAceptalerts | النوع: منطقيةautoAcceptAlerts=TRUEأو autoAcceptAlerts=FALSE | [iOS فقط] القدرة على قبول التنبيهات/المنبثقة على أجهزة iOS. |
| NewCommandTimeout | اكتب: سلسلة60 | كم من الوقت (بالثواني) سوف ينتظر Appium أمرًا جديدًا من العميل قبل افتراض أن العميل قد ترك الجلسة وإنهاءها. |
| لغة | اكتب: سلسلةfr | اللغة التي يجب تعيينها لنظام التشغيل iOS (XCuitest Driver فقط) و Android. |
| لغة | اكتب: سلسلةfr_CA, CA | LOCAALE لتعيين iOS (XCuitest Driver فقط) و Android. FR_CA تنسيق لنظام التشغيل iOS. تنسيق CA (الاسم البلاد الاختصار) لنظام Android. |
| نوريست | النوع: منطقيةtrue | لا تعيد تعيين حالة التطبيق قبل هذه الجلسة. انظر هنا لمزيد من التفاصيل. |
| أتمتة الاسم | النوع: منطقية الافتراضي: appium automationName = Appium | أي محرك الأتمتة لاستخدامه. ملاحظة: تعيين كاذبة في رمز أتمتة التطبيق ، لذلك لا يمكن تغييرها. appium (افتراضي) ، أو Uiautomator2 ، أو espresso ، أو uiautomator1 لنظام Android ، أو Xcuitest أو الأدوات الخاصة بـ iOS ، أو youiengine للتطبيق المصمم مع youiengine. |
| EventTimings | النوع: منطقية الافتراضي: خطأ true | قم بتمكين أو تعطيل الإبلاغ عن توقيت الأحداث الداخلية المختلفة (على سبيل المثال ، بداية ونهاية كل أمر ، إلخ). لتمكين ، استخدم صحيح. ثم يتم الإبلاغ عن التوقيت كخاصية أحداث للاستجابة للاستعلام عن الجلسة الحالية. راجع مستندات توقيت الحدث لهيكل هذا الاستجابة. |
| تحديد الموقع الجغرافي | اكتب: سلسلةfr | يتيح لك محاكاة سلوك الأجهزة المحمولة من مواقع مختلفة عن طريق اختيار عناوين IP المستضافة في بلدان متعددة في جميع أنحاء العالم. |
| أخرى | النوع: مجموعة من الأوتار افتراضي: [] أو صفيف فارغ "otherApps":["lt://APP1002211081648217405891389","lt://APP1002211081648217429465823"] | "يقبل قائمة URL APP التي تم إرجاعها بعد تحميل تطبيق على خوادم Lambdatest. الظروف التي يجب أن تكون راضية: 1. يجب أن يتم تمرير التطبيق أيضًا إذا تم تمرير "otherapps". 2. طول URL APP صفيف <= 3. 3. في MAX 3 يمكن تثبيت التطبيقات الأخرى. 4. لا ينبغي أن يكون التطبيق موجودًا داخل صفيف "otherapp". 5. لا تكرار في صفيف "otherapp". |
هل لديك أي أسئلة؟ يرجى التواصل مع دعم الدردشة على مدار 24 × 7 أو يمكنك أيضًا إرسال بريدنا الإلكتروني إلى [email protected].
باستخدام نفق Lambdatest ، يمكنك اختبار التطبيقات المحلية والخاصة عبر مختلف أجهزة Android و iOS على نظام أتمتة اختبار Appium Lambdatest. يستخدم Lambdatest Tunnel بروتوكولات مثل Socket و HTTPS و SSH (قذيفة آمنة) والمزيد للسماح لك ببناء اتصال نفق آمن وفريد بين نظامك المحلي وخوادم السحابة Lambdatest.
في هذه الوثائق ، تعرف على كيفية تكوين Tunnel Lambdatest لاختبار التطبيقات محليًا أو تم استضافتها بشكل خاص أثناء تنفيذ أتمتة تطبيقات الهاتف المحمول.
لاختبار التطبيقات محليًا ، ستحتاج إلى تكوين:
اتصال مع نفق Lambdatest.
اختبار البرامج النصية لتشغيل عبر نفق Lambdatest.
الموضحة أدناه هي الخطوات لتكوين الاتصال مع نفق Lambdatest.
استخراج الملف الثنائي الذي تم تنزيله.
انتقل إلى موجه الأوامر وأشار إلى الدليل/المجلد حيث قمت باستخراج الملف الثنائي.
تشغيل الأمر أدناه في المحطة.
. / LT -- user { user 's login email} --key {user' s access key } -- tunnelName { user 's tunnel name} بعد تكوين الاتصال باستخدام Tunnel Lambdatest ، ستحتاج إلى تعيين tunnel القدرة على True .
| مفتاح | قيم | وصف | القدرة المطلوبة |
|---|---|---|---|
| نفق | صحيح/خطأ | تكوين النفق | "tunnel" : True, |
يمكنك أيضًا إضافة قدرة tunnel باستخدام مولد القدرة على Lambdatest.
في حال كان لديك أي أسئلة أو تحتاج إلى أي معلومات إضافية ، قم بإسقاطها في دعم الدردشة على مدار 24 × 7 أو إرسالنا بالبريد مباشرة على [email protected].
مفتش واجهة المستخدم الرسومية لتطبيقات الأجهزة المحمولة وأكثر من ذلك ، مدعوم من خادم appium (مثبت بشكل منفصل). Appium Inspector هو عميل Appium (مثل WebDriverio ، عميل Java الخاص بـ Appium ، عميل Python من Appium ، إلخ) مع واجهة مستخدم. يمكننا استخدام الواجهة لتحديد إصدار خادم Appium ، وإعداد القدرات. بمجرد تشغيل خادم Appium وتشغيله مع التطبيق ، يمكننا التفاعل مع العناصر وتشغيل أوامر Appium الأخرى.
بحلول نهاية هذا الموضوع ، ستتمكن من:
قم بتحميل تطبيق iOS (ملف .IPA) أو تطبيق Android (ملف .APK) إلى خوادم Lambdatest باستخدام API REST . تحتاج إلى توفير اسم المستخدم الخاص بك و AccessKey في تنسيق Username:AccessKey في أمر Curl للمصادقة. تأكد من إضافة مسار AppFile في طلب Curl. فيما يلي مثال على طلب 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 APP:
لماكوس/لينكس:
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 هنا
بدلاً من ذلك ، يمكننا أيضًا الانتقال إلى مولد قدراتنا وإنشاء تمثيل القدرة باستخدام واجهة المستخدم الرسومية.

بمجرد اكتمال ذلك ، يمكنك الآن إجراء الاختبار بالنقر فوق جلسة البدء. بمجرد بدء الجلسة ، سيتوفر تسجيل مقطع فيديو إلى جانب معلومات مفصلة وسجلات لتشغيل الاختبار على لوحة القيادة Lambdatest.

هل لديك أي أسئلة؟
يرجى التواصل مع دعم الدردشة على مدار 24 × 7 أو يمكنك أيضًا إرسال بريدنا الإلكتروني إلى [email protected].
في هذه الوثائق ، ننظر إلى بعض واجهات برمجة التطبيقات التي ستساعدك على تحسين سير عمل اختبار تطبيقات الهاتف المحمول. إذا كنت تقوم بإجراء اختبار التطبيق المباشر أو الآلي ، فيمكنك استخدام واجهات برمجة التطبيقات هذه لجلب التطبيقات وحذفها.
لجلب قائمة التطبيقات التي تم تحميلها إلى جانب معرفات التطبيق الخاصة بهم ، قم بتشغيل أمر Curl أدناه.
curl -- location -- request GET 'https://YOUR_LAMBDATEST_USERNAME:[email protected]/app/data?type=ios&level=user'الموضح أدناه هو الاستجابة لطلب Curl أعلاه.
{ "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"
} ] لحذف تطبيقاتك الصاعدة ، قم بتشغيل الأمر أدناه Curl.
curl -- location -- request DELETE 'https: //YOUR_LAMBDATEST_USERNAME:[email protected]/app/delete'
-- header 'Content-Type: application/json'
-- data - raw ' {
"appIds" : "APPID1,APPID2"
} 'الموضح أدناه هو الاستجابة لطلب Curl أعلاه.
{ "message" : "Deleted successfully." }هذا كل شيء! في حال كان لديك أي أسئلة أو تحتاج إلى أي معلومات إضافية ، يمكنك التواصل مع دعم الدردشة على مدار 24 × 7 أو إرسالنا بالبريد مباشرة على [email protected].
يوفر Lambdatest شبكة أتمتة Appium عبر الإنترنت لأداء أتمتة التطبيق. تتوفر شبكة Appium عبر الإنترنت على الشبكة المحلية و Browserstack و Saucelabs و Lambdatest. لذلك ، يمكنك ترحيل البرامج النصية الحالية للأتمتة (أو الأجنحة) من الشبكة المحلية أو مختبرات الصلصة أو المتصفح إلى Lambdatest.
في هذه الوثائق ، ننظر إلى كيفية الاستفادة من Lambdatest Cloud لأتمتة التطبيق وترحيل البرامج النصية للاختبار (أو أجنحة الاختبار) من شبكتك المحلية أو مختبرات الصلصة أو المتصفح. يمكنك استخدام إمكانيات Lambdatest المطلوبة في الاختبارات الخاصة بك ، ومصادقة جلسة الاختبار الخاصة بك ، وتنفيذ الاختبارات على السحابة.
يتطلب ترحيل اختبارات مختبرات الشبكة المحلية الحالية أو Browesestack أو Sauce إلى Lambdatest بضع تعديلات في الكود الخاص بك. في هذا الدليل ، سننظر في كيفية الاستفادة من إمكانات Lambdatest المطلوبة في الاختبارات الخاصة بك ، ومصادقة جلسة الاختبار الخاصة بك ، وتنفيذ الاختبارات على متصفحات السحابة الخاصة بنا.
للانتقال من الشبكة المحلية أو مختبرات Browesestack أو Sauce إلى Lambdatest ، تحتاج إلى إجراء بعض التغييرات على أجنحة الاختبار مثل المصادقة ، والقدرات المطلوبة ، إلخ.
أولاً ، تحتاج إلى تغيير المصادقة في إعدادات التكوين في مجموعة الاختبار الخاصة بك. لتشغيل الاختبارات على شبكة Appium Lambdatest ، يجب أن يكون لديك user_name و access_key صالح لإجراء اختبارات على شبكة السحابة الخاصة بنا. في حال لم يكن لديك حساب على Lambdatest ، تفضل بزيارة صفحة التسجيل Lambdatest وإنشاء حساب جديد.
فيما يلي التغييرات في المعلمات:
يمكنك العثور على مفتاح Username Access Key في قسم ملف تعريف Lambdatest في لوحة معلومات الأتمتة .

عند الترحيل من Browserstack أو Saucelabs إلى Lambdatest ، تحتاج إلى إجراء التغييرات التالية في الكود الحالي:
فيما يلي مقارنة جنبًا إلى جنب لكل من الحقول التي أبرزناها أعلاه:
| ملكية | يكتب | التصفح | Saucelabs | Lambdatest |
|---|---|---|---|---|
| اسم المستخدم | خيط | اسم المستخدم للوصول إلى شبكة Appium على BrowserStack | اسم المستخدم للوصول إلى شبكة Appium على مختبرات الصلصة | اسم المستخدم للوصول إلى شبكة Appium على Lambdatest |
| AccessKey | خيط | AccessKey للوصول إلى شبكة Appium على BrowserStack | AccessKey للوصول إلى شبكة Appium على مختبرات الصلصة | AccessKey للوصول إلى شبكة Appium على Lambdatest |
| 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"Lambdatest
userName = "LambdaTest_UserName"
accessKey = "LambdaTest_AccessKey"الآن عليك تعديل عنوان URL HUB في إعدادات تكوين مجموعة الاختبار. عنوان URL HUB هو من نوع السلسلة ويحدد موقع المحور الذي سيتم توجيه اختبارات Appium للتنفيذ.
للتنفيذ القائم على Python ، إليك التغييرات في البرنامج النصي لعنوان URL HUB.
التصفح
@hub-cloud.browserstack.com/wd/hub
Saucelabs
@ondemand.us-west-1.saucelabs.com/wd/hub
Lambdatest
@mobile-hub.lambdatest.com/wd/hub
يتيح لك مولد القدرات تحديد القدرات المطلوبة (أو القدرات) ، وهي خيارات التكوين التي تسمح لك بتحديد ما يلي:
يمكنك أيضًا تحديد الخيارات المتقدمة الأخرى المتاحة في مولد القدرات Lambdatest.
للترحيل ، أجرينا اختبارات Appium المستندة إلى Java. فيما يلي لقطات شاشة مولد القدرة على BrowserStack و Lambdatest.



مقارنة القدرات التي تم إنشاؤها بواسطة Browserstack و Lambdatest Compabilities Generator:
| القدرات | التصفح | Saucelabs | Lambdatest |
|---|---|---|---|
| جهاز | جهاز | 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 );Lambdatest
//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" ) ;دعونا ننظر إلى مثال يوضح عملية الترحيل بأكملها. سيناريو الاختبار هو فتح تطبيق ويكيبيديا الذي يبحث عن مصطلح "Lambdatest". يتم تشغيل الاختبار التالي على 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 ()غالبية التنفيذ ، كما هو موضح أعلاه ، لا يزال دون تغيير. يتم إجراء التغييرات في البنية التحتية فقط (أي بدلاً من BrowserStack ، سيتم إجراء اختبارات أتمتة التطبيق على Lambdatest).
دعونا نحلل ما تغير من وجهة نظر التنفيذ.
التصفح
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 )Lambdatest
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 )لقد ناقشنا كيفية الترحيل من مختبرات الصلصة أو المتصفح إلى Lambdatest. دعونا نستكشف كيفية الترحيل من الشبكة المحلية إلى شبكة الأبراج المستندة إلى مجموعة النظراء.
إمكانيات Appium المطلوبة هي مجموعة من أزواج القيمة الرئيسية ملفوفة داخل كائن JSON. تطلب أزواج القيمة الرئيسية هذه خادم Appium لجلسة أتمتة الاختبار المطلوبة.
دعنا نقول أنك تريد إجراء اختبار تطبيق في Python على Samsung Galaxy Tab S4 تشغيل Android 10. يمكنك تحديد نفسه في شكل القدرة على النحو الوارد أدناه.
caps = [
{
"deviceName" : "Galaxy Tab S4" ,
"platformName" : "Android" ,
"platformVersion" : "10" ,
"build" : "Demo" ,
},
]للبدء ، قم بتغيير المصادقة في إعدادات تكوين مجموعة الاختبار. لتشغيل الاختبارات على شبكة Appium Lambdatest ، تحتاج إلى اسم مستخدم صالح ومفتاح الوصول. إذا كنت تقوم بالفعل بإجراء اختبارات على شبكتك المحلية ، فستحتاج إلى تعديل البرنامج النصي للاختبار لتهيئة برنامج تشغيل 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 ()هذا كل شيء! في حال كان لديك أي أسئلة أو تحتاج إلى أي معلومات إضافية ، يمكنك التواصل مع دعم الدردشة على مدار 24 × 7 أو إرسالنا بالبريد مباشرة على [email protected].
تفضل بزيارة الروابط التالية لمعرفة المزيد حول ميزات Lambdatest والإعداد والدروس التعليمية حول أتمتة الاختبار واختبار تطبيقات الهاتف المحمول واختبار الاستجابة والاختبار اليدوي.
يسمح مجتمع Lambdatest للأشخاص بالتفاعل مع عشاق التكنولوجيا. تواصل وطرح الأسئلة والتعلم من الأشخاص الذين يتمتعون بالدهاء في التكنولوجيا. ناقش أفضل الممارسات في تطوير الويب واختبارها و DevOps مع محترفين من جميع أنحاء العالم؟
للبقاء على اطلاع دائم بأحدث الميزات وإضافات المنتجات ، تفضل بزيارة Changelog
Lambdatest هي منصة تنفيذ وتنسيق اختبار رائدة في الاختبار سريع وموثوق وقابل للتطوير وآمن. يسمح للمستخدمين بتشغيل كل من الاختبارات اليدوية والآلية لتطبيقات الويب والجوال عبر 3000+ متصفح مختلفة وأنظمة التشغيل ومجموعات الأجهزة الحقيقية. باستخدام Lambdatest ، يمكن للشركات ضمان ملاحظات مطور أسرع وبالتالي تحقيق أسرع إلى السوق. يعتمد أكثر من 500 مؤسسة و 1 مليون مستخدم + 130 دولة على Lambdatest لاحتياجات الاختبار الخاصة بهم.
