Appium การตั้งค่า Maven Dependency: ตั้งค่าด้วย Eclipse ตัวอย่างโครงการ

⚡ สรุปอย่างชาญฉลาด

Appium ระบบจัดการการพึ่งพาของ Maven ช่วยให้โปรเจ็กต์การทำงานอัตโนมัติบนมือถือสามารถประกาศอาร์ติแฟกต์ java-client ในไฟล์ pom.xml ได้ ทำให้ Maven ค้นหาไฟล์ jar ทุกไฟล์โดยอัตโนมัติ และสามารถสร้างบิลด์เดียวกันได้บนเครื่องใดก็ได้โดยไม่ต้องดาวน์โหลดด้วยตนเอง

  • ???? Maven ทำอะไรได้บ้าง: Apache Maven จัดการวงจรการสร้างและแก้ไขการพึ่งพาจากไฟล์ pom.xml แบบประกาศเพียงไฟล์เดียว
  • ☑️ สิ่งประดิษฐ์ชิ้นหนึ่ง: ไลบรารี io.appium java-client จะดึงส่วนประกอบต่างๆ เข้ามา Selenium API, ไดรเวอร์ระยะไกล และไฟล์ JAR สำหรับการสนับสนุนแบบส่งต่อ
  • ✅ ระเบียบการควบคุมเวอร์ชัน: จับคู่เวอร์ชันของ java-client กับเวอร์ชันที่กำหนด Selenium ช่วงที่ประกาศไว้เพื่อหลีกเลี่ยงข้อผิดพลาด NoSuchMethodError ในระหว่างการทำงาน
  • 🧪 รูปแบบคงที่: Surefire จะรันเฉพาะคลาสที่อยู่ใน src/test/java เท่านั้น ดังนั้นหากวางไฟล์ทดสอบผิดที่ก็จะคอมไพล์ได้ แต่จะไม่ทำงาน
  • 🛠️ บรรทัดคำสั่ง: คำสั่ง `mvn clean test` จะคอมไพล์และรันชุดทดสอบ โดยเขียนผลลัพธ์ลงในไฟล์ `target/surefire-reports`
  • 📊 ที่ต้องการ: Maven ไม่เคยเริ่มต้นเลย Appium เซิร์ฟเวอร์หรืออุปกรณ์ ดังนั้นทั้งสองอย่างต้องพร้อมก่อนเริ่มการสร้าง

Appium ตั้งค่า dependency ของ Maven ด้วย pom.xml และ artifact java-client

ความหมายของ Apache Maven?

Apache Maven คือ Java-based การจัดการโครงการและเครื่องมืออัตโนมัติ โดยมีเฟรมเวิร์กการทำงานหลายอย่างพร้อมกันสำหรับนักพัฒนา เพื่อลดความยุ่งยากในวงจรการสร้างที่สมบูรณ์ Java การใช้งาน Maven ถูกกำหนดไว้ล่วงหน้าและประกาศในรูปแบบ XML ที่เรียกว่า POM (Project Object Model) และเรียกว่า 'pom.xml' นอกจากนี้ยังสามารถใช้กับภาษาอื่น ๆ เช่น C#, Scala, Ruby เป็นต้น

ด้วยการใช้เฟรมเวิร์ก Maven คุณสามารถจัดการงานต่อไปนี้ในโปรเจ็กต์ใดๆ ได้อย่างง่ายดาย:

  • วงจรการสร้าง
  • เอกสารโครงการ
  • รายงานการตรวจสอบ
  • การจัดการการต่อสู้
  • ข้อมูลการเผยแพร่

การใช้งานพื้นฐานของ Maven มีดังนี้:

  • บังคับใช้โครงสร้างไดเร็กทอรีมาตรฐาน
  • จัดทำโครงสร้างโครงการที่นำมาใช้ใหม่และบำรุงรักษาง่าย
  • แก้ไขการขึ้นต่อกันของแพ็คเกจ
  • จัดทำกรอบการจัดการการกำหนดค่า

ความสามารถในการแก้ไขปัญหาการพึ่งพาอาศัยกันนั้น คือสิ่งที่... Appium ความต้องการของโครงการ เนื่องจาก Java ลูกค้าดึงห่วงโซ่เข้ามา Selenium ไฟล์ JAR ที่ไม่มีใครอยากดาวน์โหลดด้วยตนเอง

ดาวน์โหลด Appium การพึ่งพา Maven

ก่อนที่คุณจะเริ่มเขียน Appium การทดสอบการพึ่งพาด้วย Maven คุณต้องดาวน์โหลดไฟล์ Appium การพึ่งพาของ Maven — the Appium ไฟล์ดาวน์โหลด JAR — จาก เว็บไซต์คลังกลางของ Mavenภาพหน้าจอด้านล่างแสดงรายการอาร์ติแฟกต์ java-client บน Maven Central ซึ่งมีทุกเวอร์ชันที่เผยแพร่และโค้ดตัวอย่างสำเร็จรูปให้ใช้งานได้

Appium รายการอาร์ติแฟกต์ java-client บนหน้าค้นหาของ Maven Central Repository

หรือเพิ่มไฟล์ POM.xml ที่กล่าวถึงด้านล่างนี้โดยตรง:

<dependency>
  <groupId>io.appium</groupId>
  <artifactId>java-client</artifactId>
  <version>3.4.1</version>
</dependency>

⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: 3.4.1 พิกัดด้านบนคือตัวอย่างดั้งเดิมและยังคงแสดงรูปร่างที่ถูกต้องของบล็อก มันมีมาก่อนโปรโตคอล W3C WebDriver ดังนั้นโครงการใหม่ควรเพิ่มเวอร์ชันให้สูงขึ้น ณ เวลาที่เขียนบทความนี้ เวอร์ชันปัจจุบันบน Maven Central คือ 10.1.1ซึ่งต้องใช้ Selenium 4.42.0 หรือใหม่กว่า

<dependency>
  <groupId>io.appium</groupId>
  <artifactId>java-client</artifactId>
  <version>10.1.1</version>
</dependency>

กรุณาผ่านของเรา กวดวิชามาเวน เพื่อเรียนรู้วิธีกำหนดค่า Maven ด้วย Eclipse.

Appium โครงสร้างโปรเจ็กต์ Maven และส่วนประกอบที่จำเป็น

Maven กำหนดโครงสร้างที่ตายตัว และการรู้โครงสร้างนี้จะช่วยป้องกันความสับสนส่วนใหญ่ที่จะเกิดขึ้นในคำแนะนำนี้ต่อไป โปรเจ็กต์ที่สร้างขึ้นจะมีสี่ส่วนที่สำคัญ:

  • pom.xml — โมเดลอ็อบเจ็กต์ของโปรเจ็กต์ (Project Object Model) ที่ระดับรากของโปรเจ็กต์ ซึ่งเป็นที่ที่ประกาศการพึ่งพาและปลั๊กอินทั้งหมด
  • src / main / java — คลาสสำหรับแอปพลิเคชันและตัวช่วย
  • ซอร์สโค้ด/เทสต์/จาวา — คลาสทดสอบ และเป็นไดเร็กทอรีเดียวที่ปลั๊กอิน Surefire สแกนเมื่อคุณเรียกใช้การสร้าง
  • เป้า — ผลลัพธ์ที่รวบรวมและรายงานการทดสอบ จะถูกสร้างขึ้นใหม่ทุกครั้งที่มีการสร้างระบบ

การขอ Appium java-client เป็น dependency ที่จำเป็นเพียงอย่างเดียว เนื่องจากเป็นตัวประกาศ Selenium API, ไดรเวอร์ระยะไกล และส่วนประกอบสนับสนุนต่างๆ ถูกนำมาใช้โดยทางอ้อม หลายทีมยังคงยึดติดอยู่กับสิ่งเดิมๆ Selenium ระบุเวอร์ชันอย่างชัดเจนเพื่อให้เห็นได้ในที่เดียว และเพิ่มตัวเรียกใช้การทดสอบ:

<dependencies>
  <dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>10.1.1</version>
  </dependency>
  <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.42.0</version>
  </dependency>
</dependencies>

รักษาความเข้ากันได้ของทั้งสองเวอร์ชัน การเผยแพร่ java-client ระบุว่า Selenium ช่วงที่รองรับ และการผสมผสานไคลเอนต์รุ่นเก่ากับรุ่นใหม่กว่ามาก Selenium เป็นสาเหตุที่พบบ่อยที่สุดที่ทำให้เกิดข้อผิดพลาด NoSuchMethodError ในระหว่างการทำงาน ที่เก็บ java-client เอกสารนี้บันทึกการจับคู่สำหรับทุกเวอร์ชันที่วางจำหน่าย

การทดสอบแอปพลิเคชันด้วย Appium และมาเวน

เมื่อมีการกำหนดความสัมพันธ์ดังกล่าวแล้ว Eclipse ขั้นตอนการทำงานด้านล่างนี้จะสร้างโปรเจ็กต์ที่สามารถใช้งานได้ตั้งแต่เริ่มต้น หลังจากกำหนดค่าเสร็จแล้ว Appium Java ปลั๊กอิน Maven ใน Eclipseพื้นที่ทำงานพร้อมสำหรับการทดสอบทุกอย่างแล้ว Android .apk สมัครด้วย Appium และ Maven ดังที่แสดงใน Appium ตัวอย่างโครงการ Maven ด้านล่าง

ขั้นตอน 1) ในขั้นตอนนี้

  1. ไปที่ใหม่ >> เลือกโครงการ Maven
  2. คลิกที่ปุ่ม 'ถัดไป'

วิซาร์ดการสร้างโปรเจ็กต์ใหม่จะเปิดขึ้นโดยไฮไลต์ Maven Project ดังที่แสดงในภาพนี้

Eclipse วิซาร์ดสร้างโปรเจ็กต์ใหม่พร้อมเลือกโปรเจ็กต์ Maven แล้ว

ขั้นตอน 2) จากนั้นในหน้าต่าง 'สร้างโปรเจ็กต์ Maven ใหม่' ให้ป้อน 'Appium ระบุ 'Test' ในคอลัมน์ Group Id และ Artifact Id ในขั้นตอนนี้ คุณต้องป้อน:

  1. รหัสกลุ่ม
  2. รหัสอาร์ติแฟกต์
  3. เวอร์ชั่น
  4. บรรจุภัณฑ์
  5. ชื่อและ Descriptไอออน
  6. เสร็จสิ้น

แบบฟอร์มสร้างโปรเจ็กต์ Maven ใหม่เมื่อกรอกข้อมูลเสร็จสมบูรณ์จะมีลักษณะดังภาพหน้าจอข้างล่าง

หน้าต่างสร้างโปรเจ็กต์ Maven ใหม่ พร้อมข้อมูล Group Id, Artifact Id, Version และ Packaging ที่กรอกเรียบร้อยแล้ว

การคลิกปุ่มเสร็จสิ้นจะเปิดคลาสใหม่ภายใต้ Group Id ที่กำหนดไว้ (Appiumทดสอบ) ชื่อ

ขั้นตอน 3) ในการเริ่มต้นด้วย Appium สำหรับการสร้างสคริปต์ ให้คลิกขวาที่ 'src/main/java' ในหน้าต่าง Explorer ด้านซ้าย จากนั้นเลือก New >> class เขียนโค้ดต่อไปนี้ Appium รหัสภายในคลาสที่เลือก

เมนูบริบทที่ใช้ในการสร้างคลาสนั้นแสดงอยู่ด้านล่าง

คลิกขวาที่เมนู src/main/java จะแสดงตัวเลือก New และ Class Eclipse นักสำรวจ

ขั้นตอน 4) ในโปรเจ็กต์เดียวกัน ให้คลิกที่ pom.xml ในเมนูสำรวจด้านซ้าย ส่วนประกอบต่างๆ ทั้งหมดจะปรากฏให้เห็นโดยอัตโนมัติในแท็บ 'pom.xml' ดูภาพประกอบด้านล่าง

แท็บแก้ไข pom.xml ใน Eclipse แสดงรายการการพึ่งพาของโปรเจ็กต์ที่ได้รับการแก้ไขแล้ว

ถ้าไฟล์ pom.xml เริ่มต้นไม่มีอยู่ ให้เพิ่มโค้ด Maven ทั้งหมดเข้าไป Appium การพึ่งพา เช่นtracคัดลอกมาจากเว็บไซต์ Maven Central Repository:

https://central.sonatype.com/artifact/io.appium/java-client

ไฟล์ pom.xml ที่แก้ไขแล้วพร้อมด้วย Appium ส่วนประกอบที่เพิ่มเข้ามาแสดงอยู่ด้านล่าง

ดูซอร์สโค้ด pom.xml หลังจากนั้น Appium ได้ทำการวาง dependency ของ java-client ลงไปแล้ว

ขั้นตอน 5) ตอนนี้ คลิกขวาที่ 'pom.xml' ในแถบสำรวจด้านซ้าย หรือที่โค้ด XML สำหรับ 'Appiumเลือกโปรเจ็กต์ 'Test' จากนั้นคลิกตัวเลือก 'Run As >> Maven Clean' ดังแสดงในภาพด้านล่าง

Eclipse เมนูย่อย Run As โดยมีตัวเลือก Maven Clean ถูกไฮไลต์ไว้

ขณะที่กำลังทำงาน คุณจะเห็นไฟล์ jar ที่เกี่ยวข้องกับ Maven ทั้งหมดและข้อความแสดงความสำเร็จ ดังเช่นในเอาต์พุตคอนโซลด้านล่าง นี่คือวิธีการเรียกใช้งาน Appium Java การทดสอบการพึ่งพาของ Maven ฝั่งไคลเอ็นต์ในสภาพแวดล้อมที่กำหนดค่าด้วย Maven

Eclipse หน้าจอคอนโซลแสดงไฟล์ jar ของ Maven ที่ดาวน์โหลดมาและข้อความแสดงความสำเร็จในการสร้าง

วิธีการเรียกใช้ Appium การทดสอบด้วยคำสั่ง Maven

การขอ Eclipse เมนูนั้นสะดวกก็จริง แต่การสร้างบิลด์เดียวกันนี้จะต้องทำงานโดยอัตโนมัติบนเซิร์ฟเวอร์บิลด์ และในกรณีนั้น บรรทัดคำสั่งเป็นเพียงตัวเลือกเดียว เปิดเทอร์มินัลในโฟลเดอร์ที่มีไฟล์ pom.xml และใช้คำสั่งเหล่านี้

mvn clean
mvn clean test
mvn clean install
mvn test -Dtest=LoginTest

แต่ละคนมีหน้าที่เฉพาะของตนเอง:

  • เอ็มวีเอ็น คลีน ลบ target ไดเร็กทอรีนี้จึงไม่มีข้อมูลเก่าหลงเหลืออยู่ในการสร้างครั้งถัดไป นี่คือคำสั่งที่ใช้ Eclipse คำแนะนำข้างต้นเกี่ยวกับตัวกระตุ้น (trigger)
  • mvn การทดสอบที่สะอาด คอมไพล์โปรเจ็กต์และรันคลาสทดสอบ ปลั๊กอิน Maven Surefire จะตรวจจับคลาสเหล่านั้นโดยอัตโนมัติ src/test/javaโดยใช้รูปแบบการรวมเริ่มต้น Test*.java, *Test.java, *Tests.java และ *TestCase.java.
  • mvn ล้างการติดตั้ง ทำการทดสอบแล้วนำไฟล์ที่บรรจุแล้วไปไว้ในที่เก็บข้อมูลในเครื่องของคุณ เพื่อให้โปรเจกต์อื่นสามารถพึ่งพาไฟล์นั้นได้
  • mvn test -Dtest=LoginTest ช่วยจำกัดการทำงานให้เหลือเพียงคลาสเดียวขณะที่คุณกำลังดีบั๊ก

มีสองประเด็นที่ทำให้คนพลาดพลั้ง ประการแรกคือ... Appium เซิร์ฟเวอร์ต้องทำงานอยู่แล้ว และต้องเชื่อมต่ออุปกรณ์หรืออีมูเลเตอร์ก่อนเริ่มการสร้าง เนื่องจาก Maven จะไม่ทำการเรียกใช้งานทั้งสองอย่าง — โปรดตรวจสอบอุปกรณ์ด้วยคำสั่ง `npm run build` ADB ตรวจสอบก่อน จากนั้นจึงบันทึกผลลัพธ์ลงในระบบ target/surefire-reportsซึ่งเป็นโฟลเดอร์ที่งาน CI ควรจัดเก็บไว้ คู่มือการใช้งาน Surefire ครอบคลุมตัวเลือกการกำหนดค่าโดยละเอียด และคำสั่งเดียวกันนี้ยังใช้ในการควบคุมอีกด้วย Appium ห้องชุดจาก Jenkins.

ร่วมกัน Appium ข้อผิดพลาดของ Maven และวิธีแก้ไข

ความล้มเหลวส่วนใหญ่ใน Appium ปัญหาการตั้งค่า Maven มักเกิดจากสาเหตุที่พบได้ซ้ำๆ เพียงไม่กี่อย่าง มากกว่าที่จะเกิดจากโค้ดทดสอบเอง ตารางด้านล่างแสดงความสัมพันธ์ระหว่างแต่ละอาการกับวิธีแก้ไขที่พบได้ทั่วไป

อาการ สาเหตุน่าจะ แก้ไขปัญหา
ไม่สามารถแก้ไขการพึ่งพาสำหรับ io.appium:java-client ได้ ระบุเวอร์ชันไม่ถูกต้อง หรือไม่สามารถเข้าถึง Maven Central ผ่านเครือข่ายได้ คัดลอกพิกัดจากรายการใน Maven Central โดยตรง แล้วรันการสร้างใหม่อีกครั้ง
ข้อผิดพลาด NoSuchMethodError หรือ NoClassDefFoundError จาก Selenium ชั้น เวอร์ชัน java-client และ selenium-java ไม่เข้ากัน ตรงกับ Selenium เวอร์ชันในช่วงที่การประกาศรุ่น java-client ระบุไว้
การทดสอบคอมไพล์สำเร็จ แต่ไม่มีการทดสอบใดทำงานได้ คลาสทดสอบจะอยู่ใน src/main/java หรือชื่อคลาสไม่ตรงกับรูปแบบ include ของ Surefire ย้ายไฟล์เหล่านั้นไปไว้ใน src/test/java และตั้งชื่อคลาสให้ลงท้ายด้วย Test
การเชื่อมต่อถูกปฏิเสธบนพอร์ต 4723 การขอ Appium เซิร์ฟเวอร์ไม่ได้ทำงาน เริ่มต้น Appium เซิร์ฟเวอร์ก่อนการสร้าง
ความสามารถไม่ถูกต้องหรือไม่รองรับ ชื่อความสามารถแบบดั้งเดิมที่ใช้กับไดรเวอร์สมัยใหม่ Revดูปัจจุบัน ความสามารถที่ต้องการ สำหรับแพลตฟอร์มของคุณ
เวอร์ชันหลักของไฟล์คลาสที่ไม่รองรับ JDK ที่ Maven ใช้แตกต่างจากระดับคอมไพเลอร์ในไฟล์ pom.xml ปรับค่าคุณสมบัติ maven.compiler.source และ target ให้ตรงกับการติดตั้งของคุณ JDK

เมื่อการสร้างล้มเหลว ให้อ่านข้อผิดพลาดแรกที่ Maven แสดงออกมา แทนที่จะเป็นข้อผิดพลาดสุดท้าย บรรทัดหลังๆ มักเป็นผลมาจากไฟล์ต้นฉบับที่หายไปในครั้งแรก

คำถามที่พบบ่อย

ควรใช้เวอร์ชันล่าสุดที่แสดงอยู่ใน Maven Central แทนที่จะใช้เวอร์ชันที่คัดลอกมาจากบทช่วยสอนเก่าๆ ณ เวลาที่เขียนบทความนี้คือเวอร์ชัน 10.1.1 ซึ่งต้องการ... Selenium เวอร์ชัน 4.42.0 หรือใหม่กว่าใน classpath

โมเดลแมชชีนเลิร์นนิงจะซ่อมแซมตัวระบุตำแหน่งองค์ประกอบหลังจากมีการเปลี่ยนแปลง UI จัดกลุ่มความล้มเหลวที่ซ้ำกันในอุปกรณ์ต่างๆ และทำนายว่าการคอมมิตใดมีแนวโน้มที่จะทำให้การทดสอบล้มเหลว ดังนั้นการรัน Maven ที่สั้นลงจึงครอบคลุมพื้นที่ที่มีความเสี่ยง

Copilot จะเติมข้อมูล groupId, artifactId และ version จากข้อความแสดงความคิดเห็นเพียงบรรทัดเดียว บ่อยครั้งที่มันแนะนำหมายเลขเวอร์ชันที่ล้าสมัย ดังนั้นควรตรวจสอบความถูกต้องกับ Maven Central ก่อนที่จะคอมมิตไฟล์

ไม่เชิง ไคลเอนต์ Java ประกาศไว้ Selenium สิ่งประดิษฐ์ส่งต่อแบบทางอ้อม ทีมหลายทีมยังคงกำหนดเวอร์ชันของ selenium-java ไว้อย่างชัดเจน เพื่อให้มองเห็นเวอร์ชันได้ และการอัปเกรดเป็นไปอย่างตั้งใจ ไม่ใช่โดยบังเอิญ

ทั้งสองวิธีแก้ปัญหาเดียวกันโดยการสร้างอาร์ติแฟกต์ขึ้นมา Maven ใช้ XML แบบประกาศ และเหมาะสำหรับทีมที่ต้องการวงจรชีวิตที่แน่นอน Gradle สคริปต์ใน Groovy หรือใช้ Kotlin และสร้างแบบเพิ่มทีละส่วน ซึ่งช่วยได้มากสำหรับคลังเก็บโค้ดขนาดใหญ่ที่มีหลายโมดูล

ใน src/test/java นั้น Surefire จะสแกนเฉพาะไดเร็กทอรีนั้นในระหว่างการสร้างเท่านั้น ดังนั้นคลาสที่อยู่ใน src/main/java จะถูกคอมไพล์แต่จะไม่ถูกเรียกใช้งาน ซึ่งทำให้ดูเหมือนว่าการทดสอบผ่านโดยไม่มีการแจ้งเตือนใดๆ

ไม่ครับ Maven ทำหน้าที่แค่แก้ไขไฟล์ JAR และรันการทดสอบเท่านั้น เริ่มต้นใหม่ Appium เชื่อมต่อกับอุปกรณ์หรือโปรแกรมจำลองก่อน หรือเรียกใช้เซิร์ฟเวอร์จากวิธีการตั้งค่าการทดสอบหรือขั้นตอนในไปป์ไลน์ CI ของคุณ

ตรวจสอบที่เก็บโค้ด เริ่มต้น Appium เลือกเซิร์ฟเวอร์และอุปกรณ์ จากนั้นรันคำสั่ง mvn clean test Archiใช้ไฟล์ target/surefire-reports เป็นไฟล์บันทึกการสร้าง เพื่อให้สามารถอ่านรายงานข้อผิดพลาดได้แม้หลังจากที่เอเจนต์ถูกทำลายแล้ว

สรุปโพสต์นี้ด้วย: