การวางตำแหน่งองค์ประกอบหน้าเป็นสิ่งที่สำคัญที่สุดในระบบอัตโนมัติและ Selenium WebDriver ให้วิธีการมากมายสำหรับการวางตำแหน่งองค์ประกอบ ผู้ทดสอบควรมีความเชี่ยวชาญในวิธีการวางตำแหน่งต่างๆ ใช้วิธีการวางตำแหน่งที่ง่ายที่สุดและมีเสถียรภาพที่สุด
การอ่านเนื้อหา
ขั้นตอนการทดสอบอัตโนมัติ
ในระหว่างการทดสอบอัตโนมัติทดสอบการทำงานตามปกติขององค์ประกอบหน้าของโปรแกรม
1. ค้นหาองค์ประกอบหน้าเว็บและกำหนดให้กับวัตถุจัดเก็บ (webElement)
2. การดำเนินการบนวัตถุที่จัดเก็บองค์ประกอบหน้าเช่น: คลิกที่ลิงค์ป้อนอักขระในกล่องอินพุต ฯลฯ
3. ตรวจสอบว่าองค์ประกอบในหน้าตรงตามความคาดหวัง
ผ่านสามขั้นตอนเหล่านี้เราสามารถดำเนินการตามองค์ประกอบหน้าและการค้นหาองค์ประกอบหน้าเป็นขั้นตอนที่สำคัญมาก ไม่พบองค์ประกอบของหน้าและไม่สามารถทำได้ในภายหลัง
ความซับซ้อนในทางปฏิบัติของเทคโนโลยีหน้าเว็บทำให้ยากที่จะค้นหาองค์ประกอบหน้าจำนวนมาก ผู้คนมักไม่รู้วิธีค้นหา
วิธีการทำตำแหน่งที่สมบูรณ์
กำหนดองค์ประกอบหน้าเว็บโดยใช้ฟังก์ชั่น findelement ของวัตถุ WebDriver
ใช้ฟังก์ชั่น findelements เพื่อค้นหาองค์ประกอบหลาย ๆ หน้าของหน้า
องค์ประกอบหน้าเป้าหมายจะต้องจัดเก็บโดยใช้วัตถุ webelement สำหรับการใช้งานในภายหลัง
วิธีการที่ใช้กันทั่วไปในการค้นหาองค์ประกอบหน้ามีดังนี้จัดเรียงตามคำแนะนำ
วิธีการวางตำแหน่ง | ตัวอย่างการใช้ภาษา Java |
การวางตำแหน่ง id | driver.findelement (By.ID ("ค่าของ ID")); |
การวางตำแหน่งชื่อ | driver.findelement (By.Name ("ค่าชื่อ")); |
การวางตำแหน่งข้อความทั้งหมดของลิงก์ | driver.findelement (by.linktext ("ข้อความทั้งหมดของลิงก์")); |
การวางตำแหน่งข้อความของลิงก์ | driver.findelement (By.PartialLinkText ("ข้อความบางส่วนของลิงก์")); |
การวางตำแหน่ง CSS | driver.findelement (By.CSSSELECTER ("CSS Expression")); |
การวางตำแหน่ง xpath | driver.findelement (by.xpath ("XPath Expression")); |
การวางตำแหน่งชื่อชั้นเรียน | driver.findelement (by.className ("แอตทริบิวต์คลาส")); |
การกำหนดเป้าหมายชื่อแท็กแท็ก | driver.findelement (by.tagname ("tagname")); |
วิธี jQuery | js.executescript ("return jQuery.Find (" jQuery expression ")") |
วิธีการค้นหา
เมื่อใช้ Selenium WebDriver สำหรับการวางตำแหน่งองค์ประกอบวิธีการค้นหาหรือ findelement
วิธีการค้นหา () ส่งคืนองค์ประกอบ หากไม่พบข้อยกเว้นจะถูกโยนลงไป
วิธีการค้นหา () ส่งคืนหลายองค์ประกอบ หากไม่พบอาร์เรย์ที่ว่างเปล่าจะถูกส่งคืนและจะไม่มีข้อยกเว้นจะถูกโยนทิ้ง
วิธีเลือกวิธีการวางตำแหน่ง
กลยุทธ์คือการเลือกวิธีการวางตำแหน่งที่ง่ายและมั่นคง
1. เมื่อองค์ประกอบหน้ามีแอตทริบิวต์ ID ลองใช้ ID เพื่อค้นหา ถ้าไม่เลือกวิธีการวางตำแหน่งอื่น
2. CSSSelector ดำเนินการอย่างรวดเร็วแนะนำ
3. เมื่อวางตำแหน่งไฮเปอร์ลิงก์คุณสามารถพิจารณา LinkText หรือ PartialLinkText: แต่ควรสังเกตว่าข้อความมักจะเปลี่ยนแปลงดังนั้นจึงไม่แนะนำให้ใช้
4. XPath มีฟังก์ชั่นที่ทรงพลังที่สุด ความเร็วในการดำเนินการช้าในเวลานั้นเพราะคุณต้องการค้นหา DOM ทั้งหมดดังนั้นพยายามใช้ให้น้อยที่สุด เมื่อไม่มีทางจริงๆให้ใช้ xpath
ค้นหาองค์ประกอบตาม ID: By.ID ()
วิธีที่แนะนำมากที่สุดในการค้นหาองค์ประกอบผ่าน ID ขององค์ประกอบหน้า มาตรฐาน W3C แนะนำให้นักพัฒนาให้คุณลักษณะ ID ที่ไม่ซ้ำกันสำหรับองค์ประกอบแต่ละหน้า
เมื่อองค์ประกอบได้รับแอตทริบิวต์ ID ที่ไม่ซ้ำกันมันเป็นเรื่องง่ายที่จะค้นหาองค์ประกอบเมื่อเราทำการทดสอบอัตโนมัติ ID ขององค์ประกอบถูกใช้เป็นแอตทริบิวต์การระบุตัวตนที่ต้องการเนื่องจากเป็นกลยุทธ์การระบุตัวตนที่เร็วที่สุด
การใช้โฮมเพจ Baidu เป็นตัวอย่างรหัสตัวอย่าง HTML ของช่องค้นหามีดังนี้ ID ของมันคือ KW
<อินพุต type = "text" autocomplete = "ปิด" maxlength = "100" id = "kw" name = "wd">
รหัสตัวอย่าง HTML สำหรับองค์ประกอบปุ่มค้นหา "baidu" มีดังนี้ ID ของมันคือ SU
<อินพุต type = "ส่ง" id = "su" value = "baidu">
รหัสตัวอย่าง java สำหรับการค้นหาองค์ประกอบโดย id ในซีลีเนียม/webdriver มีดังนี้
WebDriver Driver = New FirefoxDriver (); driver.get ("http://www.baidu.com"); webElement searchbox = driver.findelement (by.id ("kw")); Searchbox.sendkeys ("Little Tank Blog Park"); WebElement SearchButton = driver.findelement (By.id ("SU")); Searchbutton.submit (); driver.close ();ค้นหาองค์ประกอบตามชื่อ: by.name ()
การใช้ช่องค้นหาหน้าแรกของ Douban.com เป็นตัวอย่างรหัส HTML ของช่องค้นหามีดังนี้ชื่อของมันคือ: Q
<อินพุต type = "text" autocomplete = "ปิด" name = "q" placeholder = "หนังสือ, ภาพยนตร์, เพลง, กลุ่ม, สถานี, สมาชิก" size = "12" maxlength = "60">
รหัส Java ใน WebDriver เพื่อค้นหากล่องค้นหาในหน้าแรกของ Douban ผ่านชื่อมีดังนี้:
WebDriver Driver = New FirefoxDriver (); driver.get ("http://www.douban.com"); webElement searchbox = driver.findelement (by.name ("q")); Searchbox.sendkeys ("ถังเล็ก"); searchbox.submit ();ค้นหาองค์ประกอบโดย tagname: by.tagname ()
เมื่อค้นหาองค์ประกอบผ่าน tagname องค์ประกอบหลายองค์ประกอบจะถูกส่งคืน ดังนั้นจึงจำเป็นต้องมี findelements ()
WebDriver Driver = New FirefoxDriver (); driver.get ("http://www.cnblogs.com"); รายการ <webElement> ปุ่ม = driver.findelements (by.tagname ("div")); System.out.println ("ปุ่ม:" + buttons.size ());หมายเหตุ: หากคุณใช้ TagName คุณควรทราบว่า tagname ขององค์ประกอบ HTML จำนวนมากเหมือนกัน
ตัวอย่างเช่นกล่องวิทยุกล่องกาเครื่องหมายกล่องข้อความกล่องรหัสผ่าน แท็กองค์ประกอบเหล่านี้เป็นอินพุตทั้งหมด ในเวลานี้ชื่อแท็กเพียงอย่างเดียวไม่สามารถรับองค์ประกอบที่เราต้องการได้อย่างถูกต้อง คุณต้องรวมแอตทริบิวต์ประเภทเพื่อกรององค์ประกอบที่เราต้องการ
WebDriver Driver = New FirefoxDriver (); driver.get ("http://www.cnblogs.com"); รายการ <webElement> ปุ่ม = driver.findelements (by.tagname ("อินพุต")); สำหรับ (webElement webElement: ปุ่ม) {ถ้า (webElement.getAttribute ("type"). เท่ากับ ("ข้อความ")) {system.out.println ("ข้อความอินพุตคือ:" + webElement.getText ()); -ค้นหาองค์ประกอบโดย classname
การค้นหาหน้าแรกของ Taobao เป็นตัวอย่างรหัส HTML ของช่องค้นหามีดังนี้:
<อินพุต autocomplete = "ปิด" autofocus = "true" accesskey = "s" aria-label = "โปรดป้อนข้อความค้นหา" ชื่อ = "q" id = "q" aria-haspopup = "true" aria-combobox = "list" role = "combobox" x-webkit-grammar =
รหัสตัวอย่าง Java มีดังนี้
WebDriver Driver = New FirefoxDriver (); driver.get ("http://www.taobao.com"); Thread.sleep (15000); webElement searchbox = driver.findelement (by.className ("search-combobox-input")); searchbox.sendkeys ("แจ็คเก็ตลง"); searchbox.submit (); หมายเหตุ: เมื่อใช้ className เพื่อค้นหาองค์ประกอบบางครั้งคุณพบไฟล์
ค้นหาองค์ประกอบโดย linktext by.linktext ();
องค์ประกอบตำแหน่งโดยตรงผ่านข้อมูลข้อความบนไฮเปอร์ลิงก์: เช่น
<a href = "https://passport.baidu.com/v2/?login&tpl=mn&u=http%3a%2f%2fww.baidu.com%2f" ชื่อ = "tj_login"
รหัส HTML มีดังนี้
WebDriver Driver = New FirefoxDriver (); driver.get ("http://www.baidu.com"); WebElement loginLink = driver.findelement (by.linktext ("เข้าสู่ระบบ")); loginLink.click ();ค้นหาองค์ประกอบโดย partialLinkText ()
วิธีนี้เป็นรุ่นที่ปรับปรุงแล้วของวิธีก่อนหน้า เมื่อคุณต้องการจับคู่กับคำหลักบางคำเท่านั้นคุณสามารถใช้วิธีนี้เพื่อค้นหาองค์ประกอบผ่านข้อความไฮเปอร์ลิงก์บางรายการ
รหัส HTML มีดังนี้
WebDriver Driver = New FirefoxDriver (); driver.get ("http://www.baidu.com"); webElement loginLink = driver.findelement (By.PartIalLinkText ("log")); loginLink.click ();หมายเหตุ: เมื่อใช้วิธีนี้เพื่อค้นหาปัญหาอาจเกิดขึ้นได้คือเมื่อคุณไม่ทราบว่าไฮเปอร์ลิงก์มี "etc" วิธีการค้นหาจะส่งคืนองค์ประกอบแรกที่พบเท่านั้นและจะไม่คืนองค์ประกอบทั้งหมดที่ตรงตามเกณฑ์
หากคุณต้องการรับองค์ประกอบทั้งหมดที่ตรงตามเกณฑ์คุณสามารถใช้วิธีการค้นหาเท่านั้น
ข้างต้นคือข้อมูลเกี่ยวกับการวางตำแหน่งองค์ประกอบ Java Selenium เราจะยังคงเพิ่มข้อมูลที่เกี่ยวข้องในอนาคต ขอบคุณสำหรับการสนับสนุน!