ค้นหาองค์ประกอบตามข้อความลิงก์และข้อความลิงก์บางส่วนใน Selenium

ข้อความในลิงก์คืออะไร Selenium?

A ลิงก์ข้อความเข้า Selenium ใช้เพื่อระบุไฮเปอร์ลิงก์บนหน้าเว็บ ถูกกำหนดโดยใช้แท็กจุดยึด สำหรับการสร้างไฮเปอร์ลิงก์บนหน้าเว็บ เราสามารถใช้แท็กจุดยึดตามด้วยข้อความลิงก์

ลิงค์ที่ตรงกับเกณฑ์

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

ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีที่ใช้ได้ในการค้นหาและเข้าถึงลิงก์โดยใช้ Webdriver นอกจากนี้ เราจะหารือเกี่ยวกับปัญหาทั่วไปบางประการที่ต้องเผชิญขณะเข้าถึงลิงก์ และจะหารือเพิ่มเติมเกี่ยวกับวิธีแก้ปัญหาเหล่านั้น

กรอกข้อความลิงก์ใน Selenium – By.linkText()

การเข้าถึงลิงก์โดยใช้ข้อความลิงก์ที่แน่นอนทำได้โดยใช้วิธี By.linkText()- อย่างไรก็ตาม หากมีลิงก์สองลิงก์ที่มีข้อความลิงก์เหมือนกัน วิธีนี้จะเข้าถึงได้เฉพาะลิงก์แรกเท่านั้น พิจารณาโค้ด HTML ด้านล่าง

ลิงก์ข้อความเข้า Selenium–By.LinkText()

ลิงก์ข้อความเข้า Selenium–By.LinkText()

เมื่อคุณพยายามเรียกใช้โค้ด WebDriver ด้านล่าง คุณจะเข้าถึงลิงก์ "คลิกที่นี่" แรก

ลิงก์ข้อความเข้า Selenium–By.LinkText()

รหัส:

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();			
    }		

}			

นี่คือวิธีการทำงาน-

ลิงก์ข้อความเข้า Selenium–By.LinkText()

ด้วยเหตุนี้ คุณจะถูกนำไปที่ Google โดยอัตโนมัติ

ลิงก์ข้อความเข้า Selenium–By.LinkText()

กรอกข้อความลิงก์บางส่วนให้ครบถ้วน Selenium – By.partialLinkText()

การเข้าถึงลิงก์โดยใช้ข้อความลิงก์บางส่วนทำได้โดยใช้ โดย.partialLinkText() วิธี. หากคุณระบุข้อความลิงก์บางส่วนที่มีหลายรายการที่ตรงกัน ระบบจะเข้าถึงเฉพาะข้อความที่ตรงกันรายการแรกเท่านั้น พิจารณาโค้ด HTML ด้านล่าง

ข้อความลิงก์บางส่วนเข้า Selenium – By.partialLinkText()

ข้อความลิงก์บางส่วนเข้า Selenium – By.partialLinkText()

เมื่อคุณรันโค้ด WebDriver ด้านล่าง คุณจะยังคงถูกนำไปที่ Google

ข้อความลิงก์บางส่วนเข้า Selenium – By.partialLinkText()

รหัส:

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();			
    }		
}

ข้อความลิงก์บางส่วนเข้า Selenium – By.partialLinkText()

วิธีรับหลายลิงก์ด้วยข้อความลิงก์เดียวกัน

ดังนั้นจะแก้ไขปัญหาข้างต้นได้อย่างไร? ในกรณีที่มีหลายลิงค์ที่มีข้อความลิงค์เดียวกัน และเราต้องการเข้าถึงลิงค์อื่นที่ไม่ใช่ลิงค์แรก เราจะดำเนินการอย่างไร?

ในกรณีเช่นนี้ โดยทั่วไปจะมีการใช้ตัวระบุตำแหน่งที่แตกต่างกัน เช่น 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() ไม่ว่าจะอยู่ภายในหรือภายนอกองค์ประกอบระดับบล็อก