ออโต้ไอที อิน Selenium บทช่วยสอน: วิธีการใช้งาน?

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

ออโต้อิท ใน Selenium เป็นภาษาสคริปต์ฟรีแวร์ที่ช่วยในการทำงานอัตโนมัติ Windows กล่องโต้ตอบ GUI และป๊อปอัปแบบเนทีฟที่ Selenium WebDriver ไม่สามารถควบคุมโดยตรงได้ จึงเหมาะที่จะใช้เป็นตัวช่วยสำหรับการอัปโหลดไฟล์ ดาวน์โหลดไฟล์ และการแจ้งเตือนการตรวจสอบสิทธิ์

  • 🤖 วัตถุประสงค์: AutoIt ขยาย Selenium โดยการจัดการ Windowsส่วนควบคุมแบบอิงตาม, กล่องโต้ตอบแบบเนทีฟ และป๊อปอัปที่ไม่ใช่ HTML ซึ่งตัวระบุตำแหน่งของ WebDriver ไม่สามารถเข้าถึงได้
  • 🪟 ตัวระบุองค์ประกอบ: เครื่องมือ Au3Info ตรวจสอบส่วนควบคุมของหน้าต่างและแสดงคุณลักษณะต่างๆ เช่น ชื่อ คลาส และอินสแตนซ์ ซึ่งใช้ในการเขียนสคริปต์เพื่อสร้างปฏิสัมพันธ์ที่น่าเชื่อถือ
  • ⚙️ วิธีการหลัก: ControlFocus, ControlSetText และ ControlClick เป็นชุดคำสั่งขั้นต่ำที่จำเป็นสำหรับการกรอกเส้นทางและส่งคำขออัปโหลดไฟล์ในระบบ
  • บูรณาการ: ไฟล์ FileUpload.exe ที่คอมไพล์แล้วจะถูกเรียกใช้งานจาก Selenium ด้วย Runtime.getRuntime().exec() จะส่งการควบคุมไปยัง AutoIt และส่งกลับมาได้อย่างราบรื่น
  • 🧪 การใช้งานจริง: ขั้นตอนการใช้งานจะอัปโหลดประวัติย่อของคุณไปยังเว็บไซต์ Guruแบบฟอร์มสาธิต 99 รายการ ตรวจสอบการทำงานแบบครบวงจร Selenium รวมถึงขั้นตอนการทำงานอัตโนมัติของ AutoIt ด้วย

ออโต้ไอที อิน Selenium

AutoIt คืออะไร Selenium?

AutoIt เป็นภาษาสคริปต์ฟรีแวร์ที่ออกแบบมาเพื่อการทำงานอัตโนมัติ Windows GUI และการเขียนสคริปต์ทั่วไป มันใช้การผสมผสานระหว่างการเคลื่อนไหวของเมาส์ การกดแป้นพิมพ์ และการควบคุมหน้าต่าง เพื่อทำให้งานที่ทำไม่ได้ด้วยวิธีอื่นเป็นไปโดยอัตโนมัติ Selenium เว็บไดร์เวอร์

วิธีดาวน์โหลดและติดตั้ง AutoIt

ขั้นตอน 1) ไปที่นี้ ลิงค์

ขั้นตอน 2) วางเมาส์เหนือ 'AutoIt' และเมนูแบบเลื่อนลง 'AutoIt Editor'

ดาวน์โหลดและติดตั้ง AutoIt

ขั้นตอน 3) คลิกที่ตัวเลือก "ดาวน์โหลด AutoIt"

ดาวน์โหลดและติดตั้ง AutoIt

ขั้นตอน 4) ดาวน์โหลดโปรแกรม “AutoIt” โดยคลิกที่ปุ่ม 'ดาวน์โหลด AutoIt'

ดาวน์โหลดและติดตั้ง AutoIt

ขั้นตอน 5) ดาวน์โหลด “AutoIt editor” โดยคลิกที่ปุ่ม 'ดาวน์โหลด'

ดาวน์โหลดและติดตั้ง AutoIt

ขั้นตอน 6) คลิกที่ลิงค์ตามที่แสดงด้านล่าง

ดาวน์โหลดและติดตั้ง AutoIt

หลังจากดาวน์โหลดเสร็จ คุณจะได้รับไฟล์ติดตั้งสองไฟล์ดังที่แสดงในภาพด้านล่าง ไฟล์แรกคือ AutoIt เวอร์ชัน 3 การตั้งค่าและประการที่สองคือ Scitautoit3.

ดาวน์โหลดและติดตั้ง AutoIt

ขั้นตอน 7) ในการติดตั้ง AutoIt ให้คลิกที่ไฟล์ติดตั้ง AutoIt ทั้งสองไฟล์ทีละไฟล์

ขั้นตอน 8) หลังจากติดตั้งเสร็จเรียบร้อยแล้ว ให้เปิดโปรแกรม AutoIt Editor ขึ้นมา

ไปที่ 'C:\Program Files (x86)\AutoIt3\SciTE'

ดาวน์โหลดและติดตั้ง AutoIt

จากนั้นคลิกที่ไฟล์ 'SciTE.exe' โปรแกรมแก้ไข AutoIt จะเปิดขึ้นดังที่แสดงในภาพด้านล่าง

ดาวน์โหลดและติดตั้ง AutoIt

ขั้นตอน 9) ตอนนี้เปิดตัวระบุองค์ประกอบ (Element Identifier)

ไปที่ 'C:\Program Files (x86)\AutoIt3'

ดาวน์โหลดและติดตั้ง AutoIt

จากนั้นคลิกที่ไฟล์ 'Au3Info.exe' ตัวระบุองค์ประกอบจะเปิดขึ้นดังที่แสดงในภาพหน้าจอด้านล่าง

ดาวน์โหลดและติดตั้ง AutoIt

หมายเหตุ เมื่อคุณใช้งานตัวระบุองค์ประกอบนี้เสร็จแล้ว คุณต้องปิดมันด้วยตนเอง มันจะไม่ปิดโดยอัตโนมัติ

วิธีใช้งาน AutoIt ใน Selenium

ในส่วนนี้ เราจะมาดูวิธีการใช้งานโปรแกรมแก้ไข AutoIt และวิธีการค้นหาองค์ประกอบในหน้าต่างอัปโหลดไฟล์โดยใช้ AutoIt Element Identifier (Element identifier เป็นเครื่องมือชนิดหนึ่ง) Selenium IDE; ตัวระบุจะค้นหาองค์ประกอบของ GUI หน้าต่างหรือป๊อปอัปที่ไม่ใช่ HTML และให้แอตทริบิวต์ขององค์ประกอบนั้น เช่น ชื่อเรื่อง, ชั้น, ตัวอย่าง) และวิธีการเขียนสคริปต์ใน AutoIt Editor โดยใช้ 3 วิธี

ตัวอย่างเช่น: เราจะใช้หน้า “ติดต่อเรา” ของ Guruกด 99 เพื่ออัปโหลดเรซูเม่ (ไฟล์เอกสาร)

หลังจากคลิกปุ่ม 'เลือกไฟล์' จากหน้า “เขียนถึงเรา” เราจำเป็นต้องเรียกใช้สคริปต์ AutoIt การควบคุมจะถูกส่งไปยัง AutoIt ทันทีหลังจากคลิก 'เลือกไฟล์' ด้วยคำสั่งด้านล่าง ซึ่งจะจัดการส่วนของการอัปโหลดให้

Runtime.getRuntime().exec("E:\\AutoIT\\FileUpload.exe");

สุดท้าย เมื่อเรารัน Selenium สคริปต์นี้จะกรอกแบบฟอร์ม -> อัปโหลดเรซูเม่ -> ส่งแบบฟอร์ม

ใช้ AutoIt ใน Selenium

ขั้นตอน 1) ตอนนี้เปิดตัวระบุองค์ประกอบ ไปที่ 'C:\Program Files (x86)\AutoIt3' แล้วคลิกที่ไฟล์ 'Au3Info.exe' หน้าต่างตัวระบุองค์ประกอบจะเปิดขึ้นดังที่แสดงในภาพด้านล่าง

ใช้ AutoIt ใน Selenium

ขั้นตอน 2) ตอนนี้ให้เปิดหน้าต่างอัปโหลดไฟล์โดยคลิกที่ 'เลือกไฟล์' ซึ่งก็คือ Windows กิจกรรม

ใช้ AutoIt ใน Selenium

ขั้นตอน 3) ลากเครื่องมือค้นหา (Finder Tool) ไปที่ช่อง "ชื่อไฟล์" ในหน้าต่างอัปโหลดไฟล์ เพื่อดูข้อมูลคุณลักษณะพื้นฐานดังที่แสดงในภาพด้านล่างพร้อมลูกศร

ใช้ AutoIt ใน Selenium

เราสามารถหาค่าของแอตทริบิวต์ได้ เช่น title='เปิด', class='แก้ไข' และ ตัวอย่าง='1′ ดังแสดงด้านล่าง ค่าเหล่านี้จะถูกนำไปใช้ในการเขียนสคริปต์ AutoIt ตัวอย่างตามที่อธิบายไว้ในขั้นตอนที่ 4 ด้านล่าง

ใช้ AutoIt ใน Selenium

ขั้นตอน 4) ตอนนี้เปิดโปรแกรมแก้ไขสคริปต์ AutoIt ไปที่ 'C:\Program Files (x86)\AutoIt3\SciTE' แล้วคลิกที่ 'SciTE.exe' ดังแสดงในขั้นตอนที่ 7 จากหน้า 1st หัวข้อเรื่อง

เริ่มเขียนสคริปต์เพื่อเลือกไฟล์ที่จะอัปโหลด

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

  1. การควบคุมโฟกัส(” ชื่อ ”,” ข้อความ ”, controlID ) //ตั้งค่าโฟกัสอินพุตให้กับตัวควบคุมที่กำหนดบนหน้าต่าง
  2. ControlSetText(” title ”, text ”,controlID , File path ที่ต้องอัพโหลด ” ) // ตั้งค่าข้อความของตัวควบคุม
  3. ควบคุมคลิก(” ชื่อ ”,” ข้อความ ”, controlID ) //ส่งคำสั่งคลิกเมาส์ไปยังตัวควบคุมที่กำหนด

คุณจะเห็นวิธีการต่างๆ แสดงอยู่ดังที่แสดงในภาพหน้าจอด้านล่าง ข้อดีอย่างหนึ่งของ AutoIt คือมันค่อนข้างคล้ายกับ... Eclipse ซึ่งชี้ให้เห็นถึงวิธีการบางอย่าง

ใช้ AutoIt ใน Selenium

ในโปรแกรมแก้ไข AutoIt นี้ เราได้เลือก... “ควบคุมโฟกัส” วิธี. ตัวระบุองค์ประกอบถูกเปิดและย่อขนาดแล้วเนื่องจากมีการระบุองค์ประกอบแล้วในขั้นตอนที่ 3 ข้างต้น เราสามารถเปิดได้โดยการขยายให้ใหญ่สุด

ต่อไปนี้ เราจะนำค่าจากตัวระบุองค์ประกอบมาใช้สำหรับเมธอด 'ControlFocus' และ 'ControlSetText' เนื่องจากเมธอดเหล่านี้ทำงานกับองค์ประกอบเดียวกัน นั่นคือ ช่องข้อความ 'ชื่อไฟล์' แต่สำหรับเมธอด 'ControlClick' เราจำเป็นต้องดึงค่าจากองค์ประกอบที่แตกต่างกัน นั่นคือ ปุ่ม 'เปิด'

ค่าพารามิเตอร์สำหรับ การควบคุมโฟกัส วิธี:

วิธีการนี้จะกำหนดโฟกัสไปที่ช่องข้อความ 'ชื่อไฟล์' ในหน้าต่างอัปโหลดไฟล์

  • พารามิเตอร์ที่ 1 ชื่อเรื่อง เปิด ".
  • เราไม่สนใจพารามิเตอร์ตัวที่ 2 ข้อความ ไม่จำเป็นต้องใช้.
  • พารามิเตอร์ที่ 3 รหัสควบคุม คือการรวมกันของ class='Edit' และ Instance='1' เช่น 'Edit1'
    ControlFocus("Open","","Edit1") // This method sets input focus to 'File name' text box.

ใช้ AutoIt ใน Selenium

ค่าพารามิเตอร์สำหรับ ControlSetText วิธี:

วิธีการนี้ใช้สำหรับกำหนดเส้นทางของไฟล์ที่เราต้องการอัปโหลดในช่องข้อความ 'ชื่อไฟล์' หรืออีกนัยหนึ่ง วิธีนี้ใช้สำหรับตั้งค่าข้อความให้กับองค์ประกอบอินพุต

  • พารามิเตอร์ที่ 1 ชื่อเรื่อง เปิด ".
  • เราไม่สนใจพารามิเตอร์ตัวที่ 2 ข้อความ ไม่จำเป็นต้องใช้.
  • พารามิเตอร์ที่ 3 รหัสควบคุม คือการรวมกันของ class='Edit' และ Instance='1' เช่น ” Edit1 “
  • พารามิเตอร์ที่ 4 ข้อความใหม่เราส่งพาธของไฟล์ที่เราต้องการอัปโหลดเข้าไป
    ControlSetText("Open","","Edit1","E:\Resume\resume.doc") // This method inputs file path of a control.

ใช้ AutoIt ใน Selenium

หลังจากทำตามขั้นตอนข้างต้นแล้ว อย่าปิดหน้าต่าง (ตัวแก้ไขและตัวระบุองค์ประกอบ) ให้เปิดหน้าต่างเหล่านั้นไว้ คุณต้องเปิดหน้าต่างอัปโหลดไฟล์อีกครั้งเพื่อค้นหาคุณสมบัติของปุ่ม 'เปิด' ดังแสดงในขั้นตอนที่ 5 ด้านล่าง

ขั้นตอน 5) ตอนนี้ให้ลากเครื่องมือค้นหาไปที่ปุ่ม "เปิด" ในหน้าต่างอัปโหลดไฟล์ เพื่อค้นหาข้อมูลคุณลักษณะพื้นฐาน

ค่าเดิม (เช่น คุณสมบัติของช่องข้อความ 'ชื่อไฟล์') จะถูกเขียนทับด้วยค่าใหม่ของปุ่ม 'เปิด' คุณจะเห็นว่าคุณสมบัติคลาสได้เปลี่ยนเป็น "button" แล้ว ซึ่งก่อนหน้านี้คือ "edit" ในหน้าต่างระบุองค์ประกอบของ AutoIt

ใช้ AutoIt ใน Selenium

เราสามารถหาค่าของแอตทริบิวต์ได้ เช่น title='เปิด', คลาส = 'ปุ่ม' และ ตัวอย่าง='1′ ดังแสดงด้านล่าง ค่าเหล่านี้ใช้ในการเขียนสคริปต์ AutoIt ตามที่อธิบายไว้ด้านล่าง

ใช้ AutoIt ใน Selenium

ค่าพารามิเตอร์สำหรับ ควบคุมคลิก วิธี:

วิธีนี้คือการคลิกที่ปุ่ม 'เปิด' ในหน้าต่างอัปโหลดไฟล์

  • พารามิเตอร์ที่ 1 ชื่อเรื่อง เปิด ".
  • เราไม่สนใจพารามิเตอร์ตัวที่ 2; ข้อความ ไม่จำเป็นต้องใช้.
  • พารามิเตอร์ที่ 3 รหัสควบคุม คือการรวมกันของคลาสและอินสแตนซ์ เช่น ” Button1 “
ControlClick("Open","","Button1") //This method clicks on 'Open' button of file uploader.

ใช้ AutoIt ใน Selenium

ขั้นตอน 6) จากภาพหน้าจอด้านล่าง คุณจะเห็นว่าสคริปต์ AutoIt ได้ทำงานเสร็จสมบูรณ์แล้วเพื่อจัดการกับการอัปโหลดไฟล์ ตอนนี้คุณสามารถปิดตัวระบุองค์ประกอบและบันทึกสคริปต์เป็น "FileUpload" ในตำแหน่งที่กำหนด (E:\AutoIT) ได้แล้ว

ใช้ AutoIt ใน Selenium

ขณะนี้คุณไม่สามารถเรียกใช้สคริปต์นี้ได้โดยตรง คุณต้องคอมไพล์สคริปต์นี้ก่อน

ในการคอมไพล์สคริปต์นี้ คุณมีสองตัวเลือก “คอมไพล์สคริปต์ x64"และ"คอมไพล์สคริปต์ x86“ถ้าคุณมี Windows ถ้าเป็นเครื่อง 32 บิต ให้เลือก “คอมไพล์สคริปต์ x86และสำหรับ Windows สำหรับเครื่อง 64 บิต ให้เลือก “คอมไพล์สคริปต์ x64".

ใช้ AutoIt ใน Selenium

ขั้นตอน 7) 'FileUpload exe' ไฟล์จะถูกสร้างขึ้นหลังจากการคอมไพล์ คุณสามารถดูได้จากภาพด้านล่าง ตอนนี้เราสามารถใช้ไฟล์นี้ใน... Selenium สคริปต์ WebDriver

ใช้ AutoIt ใน Selenium

ต่อไปนี้เราจะใช้สคริปต์ AutoIt นี้ใน Selenium WebDriver ตรวจสอบผลลัพธ์ด้านล่าง

อัพโหลดไฟล์เข้า Selenium การใช้ AutoIt

ใน Selenium ในสคริปต์ เราจะค้นหาองค์ประกอบของแบบฟอร์มและกรอกข้อมูลในแต่ละองค์ประกอบตามที่ต้องการ จากนั้นอัปโหลดไฟล์ 'resume.doc' โดยการเรียกใช้ไฟล์ AutoIt.exe ที่สร้างขึ้นจากสคริปต์ AutoIt แล้วจึงอนุญาตให้ส่งแบบฟอร์มได้ Selenium สคริปต์ AutoIt

  • จุดเปิด Eclipse และเริ่มเขียนโค้ด
  • เมื่อ Selenium เมื่อคลิกที่ปุ่ม "เลือกไฟล์" กล่องอัปโหลดไฟล์จะเปิดขึ้น
  • จากนั้นเราต้องเรียกใช้สคริปต์ AutoIt การควบคุมจะถูกส่งไปยัง AutoIt ทันทีเพื่ออัปโหลดไฟล์ แล้วการควบคุมจะถูกส่งกลับมายังหน้าจอหลัก Selenium ที่แสดงด้านล่าง

อัพโหลดไฟล์เข้า Selenium การใช้ AutoIt

ขั้นตอน 1) พัฒนา Selenium สคริปต์ใน Eclipse.

  • Runtime คลาสอนุญาตให้สคริปต์เชื่อมต่อกับสภาพแวดล้อมที่สคริปต์กำลังทำงานอยู่
  • getRuntime () รับค่ารันไทม์ปัจจุบันที่เชื่อมโยงกับกระบวนการนี้
  • ผู้บริหาร () เมธอดนี้จะเรียกใช้สคริปต์ AutoIt (FileUpload.exe)
Runtime.getRuntime().exec("E:\\AutoIT\\FileUpload.exe");

บรรทัดด้านบนจะเรียกใช้ สคริปต์ AutoIt in Selenium และอัปโหลดไฟล์

อัพโหลดไฟล์เข้า Selenium การใช้ AutoIt

ขั้นตอน 2) ดำเนินการ Selenium สคริปต์ใน Eclipse.

importjava.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class FileUpload {
public static void main(String[] args) throws IOException {
    WebDriver driver=new FirefoxDriver();
    driver.get("https://demo.guru99.com/test/autoit.html");
    driver.findElement(By.id("postjob")).click();

    driver.findElement(By.id("input_3")).sendKeys("Gaurav");
    driver.findElement(By.id("id_4")).sendKeys("test.test@gmail.com");
    driver.findElement(By.id("input_4")).click();
    // below line execute the AutoIT script .
     Runtime.getRuntime().exec("E:\\AutoIT\\FileUpload.exe");
    driver.findElement(By.id("input_6")).sendKeys("AutoIT in Selenium");
    driver.findElement(By.id("input_2")).click();
    driver.close();
     }
}

ขั้นตอน 3) ตรวจสอบผลลัพธ์; ไฟล์ resume.doc อัปโหลดสำเร็จแล้ว และจะแสดงข้อความขอบคุณ

อัพโหลดไฟล์เข้า Selenium การใช้ AutoIt

เหตุใดจึงต้องใช้ AutoIt?

Selenium AutoIt เป็นเครื่องมือโอเพนซอร์สที่ออกแบบมาเพื่อทำงานอัตโนมัติกับแอปพลิเคชันบนเว็บในเบราว์เซอร์ต่างๆ แต่สำหรับการจัดการ GUI ของหน้าต่างและป๊อปอัพที่ไม่ใช่ HTML ในแอปพลิเคชันนั้น AutoIt ถูกออกแบบมาให้ใช้งานง่ายกว่า Selenium จำเป็นต้องใช้ เนื่องจากกิจกรรมที่เกี่ยวข้องกับหน้าต่างเหล่านี้ไม่ได้รับการจัดการโดย Selenium.

ใช้ออโต้อิท

ในบทเรียน AutoIt นี้ เราจะเรียนรู้วิธีการอัปโหลดไฟล์ Selenium การใช้งาน WebDriver โดยใช้ AutoIt นั้น จำเป็นต้องใช้เครื่องมือสามอย่างดังนี้

  • Selenium ไดรเวอร์เว็บ
  • ตัวแก้ไข AutoIt และตัวระบุองค์ประกอบ
  • หน้าต่างที่คุณต้องการทำให้เป็นอัตโนมัติ

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

Selenium WebDriver ควบคุมเฉพาะองค์ประกอบของเบราว์เซอร์เท่านั้น ส่วน AutoIt จัดการองค์ประกอบเนทีฟ Windows หน้าต่างโต้ตอบต่างๆ เช่น กล่องอัปโหลดไฟล์ ข้อความแจ้งให้ดาวน์โหลด และหน้าต่างยืนยันตัวตนขั้นพื้นฐาน ซึ่ง WebDriver ไม่สามารถโต้ตอบได้โดยตรง

เครื่องมือ Au3Info จะตรวจสอบสิ่งที่มองเห็นได้ทั้งหมด Windows ฟังก์ชันนี้จะดึงค่าของวัตถุที่อยู่ใต้เคอร์เซอร์และส่งคืนค่าชื่อ คลาส และอินสแตนซ์ ค่าเหล่านั้นจะถูกนำไปใช้โดยตรงในการเรียกใช้ฟังก์ชัน ControlFocus, ControlSetText และ ControlClick

ใช่แล้ว ไฟล์ต้นฉบับ .au3 จะต้องถูกคอมไพล์เป็นไฟล์ .exe โดยใช้ตัวเลือก x86 หรือ x64 ที่ตรงกับเครื่องของคุณ Selenium จากนั้นเรียกใช้ไฟล์ FileUpload.exe ที่คอมไพล์แล้วผ่าน Runtime.getRuntime().exec()

AutoIt คือ Windowsเครื่องมือเดียวเท่านั้น สำหรับ macOS หรือหากใช้กล่องโต้ตอบไฟล์ใน Linux ให้ใช้ AppleScript, xdotool หรือ sendKeys โดยระบุพาธของไฟล์โดยตรง เนื่องจากระบบปฏิบัติการเหล่านั้นไม่รองรับไฟล์ปฏิบัติการของ AutoIt

เครื่องมือที่ขับเคลื่อนด้วย AI เช่น TestimFunctionize และ Mabl ใช้เทคโนโลยีคอมพิวเตอร์วิชั่นในการจดจำไดอะล็อกดั้งเดิมโดยใช้เค้าโครงภาพ จากนั้นจึงสร้างตรรกะระบุตำแหน่งโดยอัตโนมัติ ซึ่งช่วยลดความจำเป็นในการใช้สคริปต์ AutoIt เมื่อจัดการกับไดอะล็อกที่ไม่เสถียรหรือเปลี่ยนแปลงอยู่ตลอดเวลา Windows ป๊อปอัพ.

ใช่แล้ว โมเดลภาษาขนาดใหญ่ เช่น ChatGPT และ Claude สามารถสร้างสคริปต์ AutoIt จากข้อความภาษาอังกฤษธรรมดาที่อธิบายถึงกล่องโต้ตอบเป้าหมาย รหัสควบคุม และเส้นทางการอัปโหลด ซึ่งผู้ทดสอบสามารถปรับแต่งและคอมไพล์ได้ในภายหลัง

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