กลยุทธ์การระบุตำแหน่งอย่างเป็นทางการสำหรับ Webdriver
ในเอกสารอย่างเป็นทางการของ W3c webdirverระบุไว้อย่างชัดเจนว่ากลยุทธ์ด้านสถานที่ตั้งคือ:
State Keyword
CSS selector "css selector"
Link text selector "link text"
Partial link text selector "partial link text"
Tag name "tag name"
XPath selector "xpath"
อย่างไรก็ตามโปรโตคอลลวดของซีลีเนียมอนุญาต:
class name
css selector
id
name
link text
partial link text
tag name
xpath
ใน THEORY เอกสารของ Selenium นั้นล้าสมัยและเรื่อง "จริง" อยู่ในเอกสารข้อมูลจำเพาะใหม่ อย่างไรก็ตาม ...
ฉันวิ่งทดสอบบางอย่างเกี่ยวกับตัวเอง Webdriver ล่าสุดของ Chrome และผมสามารถยืนยันได้ว่าname
และclass name
การทำงานทั้ง; อย่างไรก็ตามพวกเขาไม่ได้อยู่ในข้อกำหนด
ฉันจำได้ว่าอ่านปัญหา Chromium ว่าพวกเขาจะใช้ข้อกำหนด Webdriver อย่างเป็นทางการเท่านั้น
ตอนนี้: ฉันรู้คำตอบทั่วไปโดยที่ "รายละเอียดมักไม่เป็นไปตาม 100%" เป็นต้นอย่างไรก็ตามสิ่งที่ฉันอยากรู้คือ
- คุณสามารถค้นหารหัสใน Chromium ที่ใช้นี้ได้หรือไม่ (ลิงค์จะยินดีมากที่สุด)
- มีการพูดคุยเกี่ยวกับสิ่งเหล่านี้ในรายชื่ออีเมลของ Chromium หรือไม่
- คำสั่ง "ไม่เป็นทางการ" (ซึ่งบันทึกไว้ในไฟล์ข้อมูลจำเพาะซีลีเนียม "เก่า") น่าจะยังคงอยู่หรือไม่ คุณอ่านที่ไหน
คำตอบ
ใช่คุณเห็นถูกแล้ว
ตามปัจจุบันWebDriver - W3C Candidate Recommendation
การLocator Strategies
เกณฑ์มีดังนี้:
"css selector"
: ตัวเลือก CSS"link text"
: ตัวเลือกข้อความลิงก์"partial link text"
: ตัวเลือกข้อความลิงก์บางส่วน"tag name"
: ชื่อแท็ก"xpath"
: ตัวเลือก XPath
ภาพรวม:
อย่างไรก็ตามที่JsonWireProtocol
เคยใช้เพื่อสนับสนุนกลยุทธ์สเกณฑ์ด้านล่าง แต่ขณะนี้เอกสารอย่างชัดเจนมันสถานะเป็นOBSOLETE :
class name
: ส่งคืนองค์ประกอบที่ชื่อคลาสมีค่าการค้นหา ไม่อนุญาตให้ใช้ชื่อคลาสผสมcss selector
: ส่งคืนองค์ประกอบที่ตรงกับตัวเลือก CSSid
: ส่งคืนองค์ประกอบที่มีแอตทริบิวต์ ID ตรงกับค่าการค้นหาname
: ส่งคืนองค์ประกอบที่มีแอตทริบิวต์ NAME ตรงกับค่าการค้นหาlink text
: ส่งคืนองค์ประกอบจุดยึดที่มีข้อความที่มองเห็นได้ตรงกับค่าการค้นหาpartial link text
: ส่งคืนองค์ประกอบจุดยึดซึ่งข้อความที่มองเห็นได้บางส่วนตรงกับค่าการค้นหาtag name
: ส่งคืนองค์ประกอบที่มีชื่อแท็กตรงกับค่าการค้นหาxpath
: ส่งคืนองค์ประกอบที่ตรงกับนิพจน์ XPath ต้องใช้นิพจน์ XPath ที่ระบุกับเซิร์ฟเวอร์ "ตามสภาพ"; หากนิพจน์ไม่สัมพันธ์กับรูทองค์ประกอบเซิร์ฟเวอร์ไม่ควรแก้ไข ดังนั้นแบบสอบถาม XPath อาจส่งคืนองค์ประกอบที่ไม่มีอยู่ในทรีย่อยขององค์ประกอบราก
ภาพรวม:
การเปลี่ยนแปลงถูกเผยแพร่ผ่านการเชื่อมโยงเฉพาะไคลเอ็นต์ตามลำดับ สำหรับSelenium-Java
ลูกค้านี่คือรหัสไคลเอ็นต์ที่เรามีสวิตช์เคสสำหรับผู้ใช้:
switch (using) {
case "class name":
toReturn.put("using", "css selector");
toReturn.put("value", "." + cssEscape(value));
break;
case "id":
toReturn.put("using", "css selector");
toReturn.put("value", "#" + cssEscape(value));
break;
case "link text":
// Do nothing
break;
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
case "partial link text":
// Do nothing
break;
case "tag name":
toReturn.put("using", "css selector");
toReturn.put("value", cssEscape(value));
break;
case "xpath":
// Do nothing
break;
}
return toReturn;
ภาพรวม:
ตอนนี้คำถามของคุณต้องเป็นสาเหตุที่การเปลี่ยนแปลงนี้ในW3C Specs
และในไฟล์clients
. ตาม# 1042คำตอบจากWebDriver Contributorsค่อนข้างตรงตาม:
This keeps the specification simple as these can be implemented using the CSS selector, which maps down to querySelector/querySelectorAll.