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

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

ข้อความลิงก์และข้อความลิงก์บางส่วนใน Selenium ค้นหาไฮเปอร์ลิงก์บนหน้าเว็บโดยใช้ข้อความแองเคอร์ เมธอด By.linkText() จะจับคู่ข้อความที่ตรงกันทุกประการ ในขณะที่ By.partialLinkText() จะจับคู่ส่วนหนึ่งของข้อความ และทั้งสองวิธีนี้จะคำนึงถึงตัวพิมพ์ใหญ่เล็กและจะส่งคืนผลลัพธ์แรกที่ตรงกัน

  • 🔗 คำจำกัดความของข้อความลิงก์: ค้นหาไฮเปอร์ลิงก์บนหน้าเว็บโดยใช้ข้อความแองเคอร์ที่มองเห็นได้
  • 🎯 โดย.linkText(): ตรงกับข้อความลิงก์ทุกประการและส่งคืนผลลัพธ์แรกที่ตรงกัน
  • 🔎 โดย.partialLinkText(): ตรงกับส่วนหนึ่งของข้อความลิงก์ และจะส่งคืนผลลัพธ์ที่ตรงกันครั้งแรกด้วย
  • 🔠 คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก: ทั้งสองระบบระบุตำแหน่งถือว่าการใช้ตัวพิมพ์ใหญ่มีความสำคัญ ดังนั้น “egis” และ “EGIS” จึงแตกต่างกัน
  • 🧱 ลิงก์หลายรายการ/บล็อกลิงก์: สำหรับการค้นหาองค์ประกอบที่ซ้ำกัน ให้ใช้ xpath หรือ cssSelector โดยทั้งสองวิธีใช้ได้ทั้งภายในและภายนอกแท็กบล็อก

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

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

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

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

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

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

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

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

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

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

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

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

Code:

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 = "https://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()

Code:

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 = "https://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() และ โดย.partialLinkText() คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งหมายความว่าการใช้อักษรตัวพิมพ์ใหญ่มีความสำคัญ ตัวอย่างเช่นใน Mercury หน้าแรกของ Tours มีลิงก์สองลิงก์ที่มีข้อความ "egis" ลิงก์หนึ่งคือลิงก์ "ลงทะเบียน" ที่เมนูด้านบน และอีกลิงก์คือลิงก์ "ลงทะเบียนที่นี่" ที่ส่วนล่างขวาของหน้า

การพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับข้อความลิงก์

แม้ว่าลิงก์ทั้งสองจะมีลำดับตัวอักษร “egis” เหมือนกัน แต่เมธอด “By.partialLinkText()” จะเข้าถึงลิงก์ทั้งสองแยกกันโดยขึ้นอยู่กับการใช้ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก ดูตัวอย่างโค้ดด้านล่าง

การพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับข้อความลิงก์

Code

public static void main(String[] args) {
        String baseUrl = "https://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()

ลิงค์ภายนอกและภายในบล็อก

Code:

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 = "https://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();
    }
}

ผลลัพธ์ด้านบนยืนยันว่าเข้าถึงลิงก์ทั้งสองได้สำเร็จเนื่องจากชื่อหน้าที่เกี่ยวข้องได้รับการดึงอย่างถูกต้อง

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

By.linkText() จะจับคู่ข้อความที่มองเห็นได้ทั้งหมดของลิงก์ ในขณะที่ By.partialLinkText() จะจับคู่ลิงก์ใดๆ ที่มีสตริงย่อยที่กำหนดไว้ ทั้งสองฟังก์ชันจะคืนค่าเฉพาะลิงก์แรกที่ตรงกันเมื่อมีลิงก์หลายรายการที่ตรงตามเงื่อนไข

ใช่แล้ว ทั้ง By.linkText() และ By.partialLinkText() นั้นคำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ดังนั้นการใช้ตัวพิมพ์ใหญ่จึงมีความสำคัญ ข้อความ “egis” และ “EGIS” จะถูกมองว่าเป็นค่าที่แตกต่างกัน และสามารถจับคู่กับลิงก์ที่แตกต่างกันในหน้าเดียวกันได้

เนื่องจากตัวระบุข้อความลิงก์จะส่งคืนเฉพาะการจับคู่แรกเท่านั้น ให้ใช้ By.xpath() หรือ By.cssSelector() เพื่อกำหนดเป้าหมายลิงก์ที่เฉพาะเจาะจง หรือใช้ findElements() กับ By.tagName(“a”) เพื่อรวบรวมลิงก์ทั้งหมดและเลือกอันที่คุณต้องการ

เครื่องมือ AI วิเคราะห์ DOM และจัดอันดับแอตทริบิวต์ตามความเสถียร เพื่อแนะนำ XPath หรือตัวเลือก CSS ที่แข็งแกร่ง โดยจะเลือกใช้ตัวระบุที่ไม่ซ้ำกันและมีความเสถียรต่ำกว่า เพื่อลดความล้มเหลวที่เกิดจากการเปลี่ยนแปลง UI เล็กน้อยระหว่างการทดสอบ

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

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