ค้นหาองค์ประกอบตามข้อความลิงก์และข้อความลิงก์บางส่วนใน Selenium
ข้อความในลิงก์คืออะไร Selenium?
A ลิงก์ข้อความเข้า Selenium ใช้เพื่อระบุไฮเปอร์ลิงก์บนหน้าเว็บ ถูกกำหนดโดยใช้แท็กจุดยึด สำหรับการสร้างไฮเปอร์ลิงก์บนหน้าเว็บ เราสามารถใช้แท็กจุดยึดตามด้วยข้อความลิงก์
ลิงค์ที่ตรงกับเกณฑ์
สามารถเข้าถึงลิงก์ได้โดยใช้ข้อความลิงก์ที่ตรงกันทุกประการหรือบางส่วน ตัวอย่างด้านล่างแสดงสถานการณ์ที่อาจมีรายการที่ตรงกันหลายรายการ และจะอธิบายว่า WebDriver จะจัดการกับสิ่งเหล่านั้นอย่างไร
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีที่ใช้ได้ในการค้นหาและเข้าถึงลิงก์โดยใช้ Webdriver นอกจากนี้ เราจะหารือเกี่ยวกับปัญหาทั่วไปบางประการที่ต้องเผชิญขณะเข้าถึงลิงก์ และจะหารือเพิ่มเติมเกี่ยวกับวิธีแก้ปัญหาเหล่านั้น
กรอกข้อความลิงก์ใน Selenium – By.linkText()
การเข้าถึงลิงก์โดยใช้ข้อความลิงก์ที่แน่นอนทำได้โดยใช้วิธี By.linkText()- อย่างไรก็ตาม หากมีลิงก์สองลิงก์ที่มีข้อความลิงก์เหมือนกัน วิธีนี้จะเข้าถึงได้เฉพาะลิงก์แรกเท่านั้น พิจารณาโค้ด HTML ด้านล่าง
เมื่อคุณพยายามเรียกใช้โค้ด WebDriver ด้านล่าง คุณจะเข้าถึงลิงก์ "คลิกที่นี่" แรก
รหัส:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MyClass { public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/link.html"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); driver.findElement(By.linkText("click here")).click(); System.out.println("title of page is: " + driver.getTitle()); driver.quit(); } }
นี่คือวิธีการทำงาน-
ด้วยเหตุนี้ คุณจะถูกนำไปที่ Google โดยอัตโนมัติ
กรอกข้อความลิงก์บางส่วนให้ครบถ้วน Selenium – By.partialLinkText()
การเข้าถึงลิงก์โดยใช้ข้อความลิงก์บางส่วนทำได้โดยใช้ โดย.partialLinkText() วิธี. หากคุณระบุข้อความลิงก์บางส่วนที่มีหลายรายการที่ตรงกัน ระบบจะเข้าถึงเฉพาะข้อความที่ตรงกันรายการแรกเท่านั้น พิจารณาโค้ด HTML ด้านล่าง
เมื่อคุณรันโค้ด WebDriver ด้านล่าง คุณจะยังคงถูกนำไปที่ Google
รหัส:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class P1 { public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/accessing-link.html"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); driver.findElement(By.partialLinkText("here")).click(); System.out.println("Title of page is: " + driver.getTitle()); driver.quit(); } }
วิธีรับหลายลิงก์ด้วยข้อความลิงก์เดียวกัน
ดังนั้นจะแก้ไขปัญหาข้างต้นได้อย่างไร? ในกรณีที่มีหลายลิงค์ที่มีข้อความลิงค์เดียวกัน และเราต้องการเข้าถึงลิงค์อื่นที่ไม่ใช่ลิงค์แรก เราจะดำเนินการอย่างไร?
ในกรณีเช่นนี้ โดยทั่วไปจะมีการใช้ตัวระบุตำแหน่งที่แตกต่างกัน เช่น By.xpath(), By.cssSelector() หรือ By.tagName()
โดยทั่วไปจะใช้ By.xpath() ซึ่งเป็นรูปแบบที่เชื่อถือได้ที่สุด แต่ก็ดูซับซ้อนและอ่านยากเช่นกัน
การพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับข้อความลิงก์
พารามิเตอร์สำหรับ โดย.linkText() and โดย.partialLinkText() คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งหมายความว่าการใช้อักษรตัวพิมพ์ใหญ่มีความสำคัญ ตัวอย่างเช่นใน Mercury หน้าแรกของ Tours มีลิงก์สองลิงก์ที่มีข้อความ "egis" ลิงก์หนึ่งคือลิงก์ "ลงทะเบียน" ที่เมนูด้านบน และอีกลิงก์คือลิงก์ "ลงทะเบียนที่นี่" ที่ส่วนล่างขวาของหน้า
แม้ว่าทั้งสองลิงก์จะมีลำดับอักขระ “egis” แต่วิธีหนึ่งคือวิธี “By.partialLinkText()” จะเข้าถึงทั้งสองลิงก์แยกกัน ขึ้นอยู่กับการใช้อักษรตัวพิมพ์ใหญ่ของอักขระ ดูโค้ดตัวอย่างด้านล่าง
รหัส
public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/newtours/"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); String theLinkText = driver.findElement(By .partialLinkText("egis")) .getText(); System.out.println(theLinkText); theLinkText = driver.findElement(By .partialLinkText("EGIS")) .getText(); System.out.println(theLinkText); driver.quit(); }
ลิงค์ภายนอกและภายในบล็อก
มาตรฐาน HTML5 ล่าสุดอนุญาต ให้วางแท็กภายในและภายนอกแท็กระดับบล็อก เช่น , หรือ เมธอด “By.linkText()” และ “By.partialLinkText()” สามารถเข้าถึงลิงก์ที่อยู่ภายนอกและภายในองค์ประกอบระดับบล็อกเหล่านี้ได้ พิจารณาโค้ด HTML ด้านล่าง
รหัส WebDriver ด้านล่างเข้าถึงทั้งสองลิงก์โดยใช้เมธอด By.partialLinkText()
รหัส:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MyClass { public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/block.html"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); driver.findElement(By.partialLinkText("Inside")).click(); System.out.println(driver.getTitle()); driver.navigate().back(); driver.findElement(By.partialLinkText("Outside")).click(); System.out.println(driver.getTitle()); driver.quit(); } }
ผลลัพธ์ด้านบนยืนยันว่าเข้าถึงลิงก์ทั้งสองได้สำเร็จเนื่องจากชื่อหน้าที่เกี่ยวข้องได้รับการดึงอย่างถูกต้อง
สรุป
- เข้าถึงลิงค์ได้โดยใช้วิธี click()
- นอกเหนือจากตัวระบุตำแหน่งสำหรับ WebElement ใดๆ แล้ว ลิงก์ยังมีตัวระบุตำแหน่งตามข้อความลิงก์ด้วย:
- โดย.linkText() – ค้นหาลิงก์ตามการจับคู่ที่ตรงกันทุกประการกับข้อความของลิงก์ที่ระบุเป็นพารามิเตอร์
- โดย.partialLinkText() – ค้นหาลิงก์ตามการจับคู่ข้อความบางส่วนของข้อความของลิงก์
- ตัวระบุตำแหน่งทั้งสองข้างต้นเป็นแบบคำนึงถึงขนาดตัวพิมพ์
- หากมีรายการที่ตรงกันหลายรายการ By.linkText() และ By.partialLinkText() จะเลือกเฉพาะรายการที่ตรงกันรายการแรกเท่านั้น ในกรณีเช่นนี้ มีหลายลิงก์ที่มีข้อความลิงก์เดียวกัน จะมีการใช้ตัวระบุตำแหน่งอื่นๆ ที่ยึดตาม xpath, CSS
- findElements() & By.tagName(“a”) วิธีการค้นหาองค์ประกอบทั้งหมดในหน้าเว็บที่ตรงกับเกณฑ์ของตัวระบุตำแหน่ง
- ลิงก์สามารถเข้าถึงได้โดย By.linkText() และ By.partialLinkText() ไม่ว่าจะอยู่ภายในหรือภายนอกองค์ประกอบระดับบล็อก