นี่คือการเชื่อมโยงภาษา Java สำหรับการเขียนการทดสอบ Appium ที่สอดคล้องกับ WebDriver Protocol
เนื่องจาก v9 ไคลเอนต์รองรับเฉพาะ Java 11 ขึ้นไป ปฏิบัติตามคู่มือการย้าย v8 ถึง v9 เพื่อปรับปรุงกระบวนการย้าย
เนื่องจาก Appium Java Client เวอร์ชัน 8 มีการเปลี่ยนแปลงที่สำคัญหลายประการ ซึ่งอาจจำเป็นต้องอัปเดตโค้ดไคลเอ็นต์ของคุณ ตรวจสอบให้แน่ใจว่าได้ปฏิบัติตามคู่มือการโยกย้าย v7 ถึง v8 เพื่อปรับปรุงกระบวนการโยกย้าย
เพิ่มสิ่งต่อไปนี้ใน pom.xml:
< dependency >
< groupId >io.appium groupId >
< artifactId >java-client artifactId >
< version >${version.you.require} version >
< scope >test scope >
dependency >
เพิ่มสิ่งต่อไปนี้ใน build.gradle:
dependencies {
testImplementation ' io.appium:java-client:${version.you.require} '
}
โปรเจ็กต์ไคลเอนต์ Java พร้อมใช้งานก่อนที่จะเผยแพร่อย่างเป็นทางการไปยัง Maven Central อ้างอิง jitpack.io
เพิ่มสิ่งต่อไปนี้ใน pom.xml:
< repositories >
< repository >
< id >jitpack.io id >
< url >https://jitpack.io url >
repository >
repositories >
เพิ่มการพึ่งพา:
< dependency >
< groupId >com.github.appium groupId >
< artifactId >java-client artifactId >
< version >latest commit ID from master branch version >
dependency >
เพิ่มพื้นที่เก็บข้อมูล JitPack ลงในไฟล์บิลด์ของคุณ เพิ่มลงใน root build.gradle ของคุณที่ส่วนท้ายของที่เก็บ:
allprojects {
repositories {
// ...
maven { url ' https://jitpack.io ' }
}
}
เพิ่มการพึ่งพา:
dependencies {
implementation ' com.github.appium:java-client:latest commit id from master branch '
}
ไคลเอนต์ Appium Java | ลูกค้าซีลีเนียม |
---|---|
9.2.1 (ปัญหาที่ทราบ: #2145, #2146), 9.2.2 , 9.2.3 , 9.3.0 | 4.19.0 , 4.19.1 , 4.20.0 , 4.21.0 , 4.22.0 , 4.23.0 |
9.1.0 , 9.2.0 | 4.17.0 , 4.18.0 , 4.18.1 |
9.0.0 | 4.14.1 , 4.15.0 , 4.16.0 (เสียหายบางส่วน), 4.16.1 |
ไม่มี | 4.14.0 |
8.5.0 , 8.5.1 , 8.6.0 | 4.9.1 , 4.10.0 , 4.11.0 , 4.12.0 , 4.12.1 (ปัญหาที่ทราบ: #2004), 4.13.0 |
8.4.0 | 4.8.2 , 4.8.3 , 4.9.0 |
8.3.0 | 4.7.0 , 4.7.1 , 4.7.2 , 4.8.0 , 4.8.1 |
8.2.1 | 4.5.0 , 4.5.1 , 4.5.2 , 4.5.3 , 4.6.0 |
ไคลเอ็นต์ Selenium ไม่เป็นไปตามการกำหนดเวอร์ชันแบบ Semantic ดังนั้นการเปลี่ยนแปลงที่เสียหายอาจถูกนำมาใช้แม้ในแพตช์ ซึ่งต้องการให้ทีม Appium อัปเดตไคลเอ็นต์ Java เพื่อตอบสนอง
Appium Java Client ประกาศการขึ้นต่อกันของ Selenium โดยใช้ช่วงเวอร์ชันเปิดซึ่งได้รับการจัดการที่แตกต่างกันโดยเครื่องมือสร้างที่แตกต่างกัน บางครั้งผู้ใช้อาจต้องการปักหมุดการพึ่งพา Selenium ที่ใช้แล้วด้วยเหตุผลหลายประการ ติดตามบทความการจัดการการพึ่งพาสกรรมกริยาเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างเวอร์ชัน Selenium คงที่สำหรับเฟรมเวิร์กการทดสอบ Java ของคุณ
ไคลเอนต์ Appium java มีคลาสเฉพาะเพื่อรองรับไดรเวอร์ Appium ต่อไปนี้:
หากต้องการทำให้แพลตฟอร์มอื่นๆ ที่ไม่ได้ระบุไว้ข้างต้นเป็นอัตโนมัติ คุณสามารถใช้ AppiumDriver หรืออนุพันธ์ที่กำหนดเองได้
ไคลเอนต์ Appium java สร้างขึ้นบน Selenium และใช้อินเทอร์เฟซเดียวกันกับที่ RemoteWebDriver พื้นฐานทำ อย่างไรก็ตาม Selenium lib มุ่งเน้นไปที่การทำงานอัตโนมัติของเว็บเบราว์เซอร์เป็นส่วนใหญ่ ในขณะที่ Appium นั้นเป็นสากลและครอบคลุมแพลตฟอร์มที่เป็นไปได้ที่หลากหลาย เช่น ระบบปฏิบัติการมือถือและเดสก์ท็อป อุปกรณ์ IOT เป็นต้น ดังนั้นคลาส AppiumDriver
พื้นฐานในแพ็คเกจนี้จะขยาย RemoteWebDriver
ด้วยคุณสมบัติเพิ่มเติม และทำให้มีความยืดหยุ่นมากขึ้น ดังนั้นจึงไม่ได้เน้นไปที่การดำเนินการที่เกี่ยวข้องกับเว็บเบราว์เซอร์อย่างเคร่งครัด
ไคลเอนต์ Appium java จัดเตรียมคลาสเฉพาะเพื่อควบคุมการทำงานของเซิร์ฟเวอร์ Appium คลาสคือ AppiumDriverLocalService อนุญาตให้เรียกใช้และตรวจสอบเซิร์ฟเวอร์ Appium ภายในเครื่อง จากโค้ดเฟรมเวิร์กการทดสอบของคุณ และมีทางลัดที่สะดวกหลายอย่าง สามารถใช้บริการได้ดังนี้:
AppiumDriverLocalService service = AppiumDriverLocalService . buildDefaultService ();
service . start ();
try {
// do stuff with drivers
} finally {
service . stop ();
}
คุณสามารถปรับแต่งลักษณะการทำงานของบริการได้ เช่น จัดเตรียมอาร์กิวเมนต์บรรทัดคำสั่งที่กำหนดเอง หรือเปลี่ยนเส้นทางไปยังไฟล์ปฏิบัติการของเซิร์ฟเวอร์โดยใช้ AppiumServiceBuilder
บันทึก
AppiumDriverLocalService ไม่รองรับการจัดการเซิร์ฟเวอร์บนโฮสต์ที่ไม่ใช่ในเครื่อง
UiAutomator2Options options = new UiAutomator2Options ()
. setUdid ( "123456" )
. setApp ( "/home/myapp.apk" );
AndroidDriver driver = new AndroidDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . xpath ( "//Button" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
XCUITestOptions options = new XCUITestOptions ()
. setUdid ( "123456" )
. setApp ( "/home/myapp.ipa" );
IOSDriver driver = new IOSDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . accessibilityId ( "myId" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
BaseOptions options = new BaseOptions ()
. setPlatformName ( "myplatform" )
. setAutomationName ( "mydriver" )
. amend ( "mycapability1" , "capvalue1" )
. amend ( "mycapability2" , "capvalue2" );
AppiumDriver driver = new AppiumDriver (
// The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
new URL ( "http://127.0.0.1:4723" ), options
);
try {
WebElement el = driver . findElement ( AppiumBy . className ( "myClass" ));
el . click ();
driver . getPageSource ();
} finally {
driver . quit ();
}
ตรวจสอบ README ของไดรเวอร์ที่เกี่ยวข้องเพื่อทราบรายการความสามารถและคุณสมบัติที่สนับสนุน
คุณสามารถค้นหาตัวอย่างโค้ดเพิ่มเติมได้อีกมากมายโดยการตรวจสอบหน่วยของลูกค้าและการทดสอบการรวม
ไคลเอนต์ Appium Java ใช้การเข้าถึงแบบสะท้อนไปยังสมาชิกส่วนตัวของโมดูลอื่น ๆ เพื่อให้แน่ใจว่ามีการทำงานที่เหมาะสมของคุณสมบัติหลายอย่าง เช่น โมเดล Page Object หากคุณได้รับข้อยกเว้นรันไทม์และมี InaccessibleObjectException
อยู่ในการติดตามสแต็กและรันไทม์ Java ของคุณเป็นเวอร์ชัน 16 หรือสูงกว่า ให้พิจารณาบทช่วยสอนของ Oracle ต่อไปนี้และ/หรือการตรวจสอบปัญหาที่มีอยู่เพื่อหาแนวทางแก้ไขที่เป็นไปได้ แนวคิดนี้จะอนุญาตการเข้าถึงโมดูลเฉพาะอย่างชัดเจนโดยใช้ --add-exports/--add-opens
อาร์กิวเมนต์บรรทัดคำสั่ง
วิธีแก้ปัญหาอื่นที่เป็นไปได้แต่ไม่ค่อยแนะนำคือดาวน์เกรด Java เป็นเวอร์ชัน 15 หรือต่ำกว่า
ปัญหาดังกล่าวมักเกิดขึ้นเมื่อเซิร์ฟเวอร์ Appium เริ่มต้นโดยตรงจากโค้ดเฟรมเวิร์กของคุณ แทนที่จะทำงานแยกกันด้วยสคริปต์หรือด้วยตนเอง ขึ้นอยู่กับวิธีการเริ่มต้นกระบวนการเซิร์ฟเวอร์ กระบวนการอาจสืบทอดสภาพแวดล้อมเชลล์ที่ใช้งานอยู่ในปัจจุบันหรือไม่ก็ได้ นั่นคือเหตุผลที่คุณอาจยังคงได้รับข้อผิดพลาดเกี่ยวกับการมีอยู่ของตัวแปร แม้ว่าตัวแปรเหล่านี้จะถูกกำหนดไว้สำหรับล่ามบรรทัดคำสั่งของคุณก็ตาม ขอย้ำอีกครั้งว่าไม่มีวิธีแก้ปัญหาแบบสากลสำหรับสิ่งนั้น เนื่องจากมีหลายวิธีในการเริ่มกระบวนการเซิร์ฟเวอร์ใหม่ ลองตรวจสอบเอกสารการแก้ไขปัญหาสภาพแวดล้อม Appium เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ไขจุดบกพร่องและแก้ไขปัญหาสภาพแวดล้อมของกระบวนการ
ไปที่ CHANGELOG.md เพื่อดูรายการการเปลี่ยนแปลงทั้งหมดระหว่างเวอร์ชัน
ทำการทดสอบโดยใช้
gradle clean -Dtest.single=การทดสอบ IOSAlertTest